Avatar billede renebmadsen Nybegynder
09. april 2007 - 09:31 Der er 14 kommentarer og
1 løsning

arrayList til en JTable i en GUI

Hvordan får jeg min arraylist smidt ind i en JTable?
Har lavet det i en JList men var ikke godt da mit vareNr ikke altid er lige langt, så er det ikke pænt..
håber på lidt hjælp..
har ikke sendt kode fra min GUI med..

public static VareEnhed[] hentVareListe()
{
    ArrayList<VareEnhed> totalAntal= new ArrayList<VareEnhed>(); //indeholder VareNr og beskrivelse. fra rs, i en ArrayList
   
    try //laver en try catch så mulige fejl fra SQL fanges
    {
        Statement stmt = Forbindelse.connection.createStatement(); //her oprettes der et statement til databasen
        rs = stmt.executeQuery("SELECT VareNr, Beskrivelse  FROM vare"); //statement som henter alle VareNr og lagervare(antal) fra databasen tabellen vare
     
        //Resultatet ligges i resultset'et rs.

        while (rs.next()) //der køres en while løkke i lige så lang tid som der er elementer
        {
            String vareNr = rs.getString("VareNr");
            String beskrivelse = rs.getString("beskrivelse");
            VareEnhed vare = new VareEnhed (vareNr, beskrivelse);
            totalAntal.add (vare);
                 
        }
    }
    catch(Exception e) //Her er der fastsat at alle fejl skal fanges og
    {
        System.out.print("\nDer opstod en fejl under hentningen \n"); //dette skal udskrives.
    }
    return totalAntal.toArray (new VareEnhed[0]);
 
}


#-------------



public class VareEnhed {

   
        private String vareNr, beskrivelse;
       
        public VareEnhed (String vareNr, String beskrivelse)
        {
            this.vareNr = vareNr;
            this.beskrivelse = beskrivelse;
        }
       
        public String getVareNr()
        {
            return vareNr;
        }
       
        public String getbeskrivelse()
        {
            return beskrivelse;
        }
       
        public String toString()
        {
            return vareNr + " - " + beskrivelse;
        }
    }
Avatar billede _carsten Nybegynder
09. april 2007 - 10:28 #1
Det kan du gøre sådan

JTable table = dinTabel;

for(int i =0; i < totalAntal.size(); i++){
    VareEnhed v = toalAntal.get(i);
   
    table.setValueAt(v.getVareNr(), i, 0);
    table.setValueAt(v.getbeskrivelse(), i, 1);
}
Avatar billede renebmadsen Nybegynder
09. april 2007 - 10:33 #2
min GUI



import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListModel;


public class DirektorGUI
{
    private JTable table;
    private JList vareNrJList = new JList();
    private JLabel varenrLabel = new JLabel();
    private JTextField visAlleMedarbejdereTextField = new JTextField();
    private JTextField textField_1= new JTextField();
    private JTextField visAlleOrdreTextField = new JTextField();
    private JButton tilHovedvindueButton = new JButton();
    private ButtonGroup buttonGroup = new ButtonGroup();
    private JRadioButton radioButton_4 = new JRadioButton();
    private JRadioButton radioButton_5 = new JRadioButton();
    private JRadioButton visAlleOrdreRadioButton = new JRadioButton();
    private JRadioButton igangvaerendeordreradioButton = new JRadioButton();
    private JRadioButton visAlleMedarbejdereRadioButton = new JRadioButton();
    private JRadioButton visudfravarenrRadioButton = new JRadioButton();
    private JFrame frame;
   

    public DirektorGUI()
    {
        initialize();
    }

    public void initialize()
    {
        frame = new JFrame("Direktør");
        frame.setMenuBar(null);
        frame.getContentPane().setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension d= Toolkit.getDefaultToolkit().getScreenSize();
        frame.setBounds(0,0,d.width, d.height);
        frame.setVisible(true);
       
        tilHovedvindueButton.setText("Til Hovedvindue");
        tilHovedvindueButton.setBounds(10, 10,d.width-1075, d.height-770);
       
        visAlleOrdreTextField.setText("Vis alle ordre");
        visAlleOrdreTextField.setBounds(260, 67,d.width-345, d.height-140);
        visAlleOrdreTextField.setVisible(true);
           
        textField_1.setText("Vis alle igangværende ordre");
        textField_1.setBounds(260, 67, d.width-345, d.height-140);
        textField_1.setVisible(false);
   
        visAlleMedarbejdereTextField.setText("Vis alle medarbejdere");
        visAlleMedarbejdereTextField.setBounds(260, 67, d.width-345, d.height-140);
        visAlleMedarbejdereTextField.setVisible(false);
       
        visAlleOrdreRadioButton.setText("Vis alle ordre");
        visAlleOrdreRadioButton.setBounds(10, 74, 163, 23);
        visAlleOrdreRadioButton.setSelected(true);
       
        igangvaerendeordreradioButton.setText("Vis alle igangværende ordre");
        igangvaerendeordreradioButton.setBounds(10, 48, 163, 23);
        visAlleOrdreRadioButton.setSelected(false);
       
        visAlleMedarbejdereRadioButton.setText("Vis alle medarbejdere");
        visAlleMedarbejdereRadioButton.setBounds(10, 103, 163, 23);
        visAlleOrdreRadioButton.setSelected(false);
       
        visudfravarenrRadioButton.setText("Vis antal og placering efter vareNr");
        visudfravarenrRadioButton.setBounds(10, 189, 204, 23);
        visAlleOrdreRadioButton.setSelected(false);
       
        radioButton_4.setText("New JRadioButton");
        radioButton_4.setBounds(10, 135, 157, 23);
        visAlleOrdreRadioButton.setSelected(false);
           
        radioButton_5.setText("New JRadioButton");
        radioButton_5.setBounds(10, 164, 157, 23);
        visAlleOrdreRadioButton.setSelected(false);
       
       
//---
               
        VareEnhed[] alleVarer = Vare.hentVareListe(); // Hent alle varer
        vareNrJList = new JList(alleVarer); // Opret JList med de hentede varer
        vareNrJList.setBounds(260, 26, 183, 200);
        vareNrJList.setVisible(false);

//----
       
        varenrLabel.setText("VareNr og beskrivelse");
        varenrLabel.setBounds(260, 3, 183, 14);
        varenrLabel.setVisible(false);
       
        buttonGroup.add(igangvaerendeordreradioButton);
        buttonGroup.add(visAlleMedarbejdereRadioButton);
        buttonGroup.add(visudfravarenrRadioButton);
        buttonGroup.add(visAlleOrdreRadioButton);
        buttonGroup.add(radioButton_4);
        buttonGroup.add(radioButton_5);
       
        frame.getContentPane().add(visAlleOrdreTextField);
        frame.getContentPane().add(tilHovedvindueButton);
        frame.getContentPane().add(textField_1);
        frame.getContentPane().add(visAlleMedarbejdereTextField);
        frame.getContentPane().add(visAlleOrdreRadioButton);
        frame.getContentPane().add(igangvaerendeordreradioButton);
        frame.getContentPane().add(visAlleMedarbejdereRadioButton);
        frame.getContentPane().add(visudfravarenrRadioButton);
        frame.getContentPane().add(radioButton_4);
        frame.getContentPane().add(radioButton_5);
        frame.getContentPane().add(vareNrJList);
        frame.getContentPane().add(varenrLabel);

        visudfravarenrRadioButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent arg0) {varenrLabel.setVisible(true);
            vareNrJList.setVisible(true);
            visAlleOrdreTextField.setVisible(false);
            textField_1.setVisible(false);
            visAlleMedarbejdereTextField.setVisible(false);
            }
        });
       
        tilHovedvindueButton.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent arg0) {new HovedvindueGUI2();
            frame.dispose();
            }
        });
   
        visAlleOrdreRadioButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent arg0) {visAlleOrdreTextField.setVisible(true);
            textField_1.setVisible(false);
            visAlleMedarbejdereTextField.setVisible(false);
            vareNrJList.setVisible(false);
            }
        });
   
        igangvaerendeordreradioButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent arg0) {textField_1.setVisible(true);
            visAlleOrdreTextField.setVisible(false);
            visAlleMedarbejdereTextField.setVisible(false);
            vareNrJList.setVisible(false);
            }
        });
   
        visAlleMedarbejdereRadioButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent arg0) {visAlleMedarbejdereTextField.setVisible(true);
            visAlleOrdreTextField.setVisible(false);
            textField_1.setVisible(false);
            vareNrJList.setVisible(false);
            }
        });       

        final JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 235, 100, 20);
        frame.getContentPane().add(scrollPane);

        table = new JTable();
        scrollPane.setViewportView(table);
    }
}
Avatar billede _carsten Nybegynder
09. april 2007 - 10:48 #3
Lav en metode i din GUI og kald metoden når tabellen skal fyldes

public void indsaetVareData(){
    for(int i =0; i < totalAntal.size(); i++){
        VareEnhed v = toalAntal.get(i);
   
        table.setValueAt(v.getVareNr(), i, 0);
        table.setValueAt(v.getbeskrivelse(), i, 1);
    }
}
Avatar billede _carsten Nybegynder
09. april 2007 - 11:04 #4
I øvrigt kan du godt bruge en JList, hvis du laver din egen CellRenderer, selv ville jeg helt klart vælge tabellen, så nedenstående er bare et eksempel på hvordan en  JList kunne anvendes.



public class JListTest extends javax.swing.JFrame {
   
    /** Creates new form JListTest */
    public JListTest() {
        initComponents();
        jList1.setCellRenderer(new MyRenderer(jList1.getPreferredSize()));
    }
   
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                         
    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();

        getContentPane().setLayout(new java.awt.FlowLayout());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jScrollPane1.setMinimumSize(new java.awt.Dimension(120, 60));
        jScrollPane1.setPreferredSize(new java.awt.Dimension(120, 60));
        jScrollPane1.setRequestFocusEnabled(false);
        jList1.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "1;Vare 1", "12;Vare 2", "123;Vare 3", "1234;Vare 4", "12345;Vare 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jScrollPane1.setViewportView(jList1);

        getContentPane().add(jScrollPane1);

        pack();
    }// </editor-fold>                       
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JListTest().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify                   
    private javax.swing.JList jList1;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration                 
   
}




import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/**
*
* @author CFH
*/
public class MyRenderer extends JComponent implements ListCellRenderer{
   
    /**
    * Creates a new instance of PrintRenderer
    */
    public MyRenderer(Dimension d) {
        this.width = d.width;
        this.height = 20;
    }

   
    public Component getListCellRendererComponent(JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus) {
   
        this.value = value != null ? value.toString() : "";
        this.fore = list.getForeground();
       
        if(isSelected)
            this.back = list.getSelectionBackground();
        else
            this.back = list.getBackground();
        return this;
    }
   
    public void paint(Graphics g){
        g.setColor(back);
        g.fillRect(0,0, width, height);
       
        g.setColor(fore);
        String[] s = value.split(";");
        if(s.length > 1){
            g.drawString(s[0], 0,13);
            g.drawString(s[1], 43,13);
        }
       
    }

    public Dimension getPreferredSize(){
        return new Dimension(width, height);
    }
   
    public Dimension getMinimumSize(){
        return new Dimension(width, height);
    }

    private Color back, fore;
    private String value ="";
    private int width, height;
}
Avatar billede renebmadsen Nybegynder
09. april 2007 - 11:06 #5
nu køre det slet ikke for mig.
ved slet ikke hvor det skal sættes ind?


public class DirektorGUI
{
    //    class TableTableModel extends AbstractTableModel {
    //        private static final long serialVersionUID = 1L;
    //        public final String[] COLUMN_NAMES = new String[] {"VareNr", "Beskrivelse"};
    //        public int getRowCount() {
    //            return 0;
    //        }
    //        public int getColumnCount() {
    //            return COLUMN_NAMES.length;
    //        }
    //        public String getColumnName(int columnIndex) {
    //            return COLUMN_NAMES[columnIndex];
    //        }
    //        public Object getValueAt(int rowIndex, int columnIndex) {
    //        return null;
    //    }
    //}

    private JTable table;
    private JList vareNrJList = new JList();
    private JLabel varenrLabel = new JLabel();
    private JTextField visAlleMedarbejdereTextField = new JTextField();
    private JTextField textField_1= new JTextField();
    private JTextField visAlleOrdreTextField = new JTextField();
    private JButton tilHovedvindueButton = new JButton();
    private ButtonGroup buttonGroup = new ButtonGroup();
    private JRadioButton radioButton_4 = new JRadioButton();
    private JRadioButton radioButton_5 = new JRadioButton();
    private JRadioButton visAlleOrdreRadioButton = new JRadioButton();
    private JRadioButton igangvaerendeordreradioButton = new JRadioButton();
    private JRadioButton visAlleMedarbejdereRadioButton = new JRadioButton();
    private JRadioButton visudfravarenrRadioButton = new JRadioButton();
    private JFrame frame;
   

    public DirektorGUI()
    {
        initialize();
    }

    public void initialize()
    {
        //final JScrollPane scrollPane = new JScrollPane();
        //scrollPane.setBounds(100, 273, 300, 200);
        //frame.getContentPane().add(scrollPane);

        //table = new JTable();
        //table.setModel(new TableTableModel());
        //scrollPane.setViewportView(table);
Avatar billede _carsten Nybegynder
09. april 2007 - 11:25 #6
Du mangler lige nogle ting på din TableModel, jeg vist husket det mest nødvendige her


        class TableTableModel extends AbstractTableModel {
            private static final long serialVersionUID = 1L;
            public final String[] COLUMN_NAMES = new String[] {"VareNr", "Beskrivelse"};
           
            private ArrayList<Vector> data = new ArrayList<Vector>();
            private Vector row = new Vector();
           
           
            public int getRowCount() {
                return data.size();
            }
           
            public int getColumnCount() {
                return COLUMN_NAMES.length;
            }
           
            public String getColumnName(int columnIndex) {
                return COLUMN_NAMES[columnIndex];
            }
           
           
            public Object getValueAt(int rowIndex, int columnIndex) {
                Vector v = data.get(rowIndex);
               
                return v.get(columnIndex);
            }
           
            public void setValueAt(Object obj, int row, int column){
                if(row >= data.size() ){
                    addRow();
                }
               
                Vector v = data.get(row);
                v.setElementAt(obj, column);
            }
           
            public Class getColumnClass(int col){
                return String.class;
            }
           
            private void addRow(){
                Vector v = new Vector();
                v.add("");
                v.add("");
                data.add(v);
            }
        }
Avatar billede _carsten Nybegynder
09. april 2007 - 11:31 #7
Du behøver ikke lave din egen TableModel i dette tilfælde, lav din tabel på denne måde det er nemmere

JTable table = new JTable(new Object[0][2], new String[] {"VareNr", "Beskrivelse"});
Avatar billede renebmadsen Nybegynder
09. april 2007 - 11:45 #8
tak for din anstrengelse men jeg er slet ikke med lige nu..
jeg har lavet det med JList.
Men det her det driller, for vildt..
Avatar billede _carsten Nybegynder
09. april 2007 - 11:52 #9
Okay - så prøver vi da bare igen

Sådan gør du med tabellen:
table = new JTable(new Object[0][2], new String[] {"VareNr", "Beskrivelse"});
scrollPane.setViewportView(table);



Her fylder du data i tabellen (Jeg kan bare ikke finde ud af hvor du afvikler denne del af koden)
//---
               
        VareEnhed[] alleVarer = Vare.hentVareListe(); // Hent alle varer
        for(int i =0; i < alleVarer.length; i++){
            VareEnhed v = alleVarer[i];
   
            table.setValueAt(v.getVareNr(), i, 0);
            table.setValueAt(v.getbeskrivelse(), i, 1);
        }

        //vareNrJList = new JList(alleVarer); // Opret JList med de hentede varer
        //vareNrJList.setBounds(260, 26, 183, 200);
        //vareNrJList.setVisible(false);

//----
Avatar billede renebmadsen Nybegynder
09. april 2007 - 11:57 #10
hvad skal i min GUI og hvad skal i min Vare klasse eller  klassen vareEnheder
Avatar billede _carsten Nybegynder
09. april 2007 - 11:57 #11
Hov - jo, det gør du jo i din initialize()

Så skal det det se sådan ud.

Nederste del af din klasse

.....
.....
....
        visAlleMedarbejdereRadioButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent arg0) {visAlleMedarbejdereTextField.setVisible(true);
            visAlleOrdreTextField.setVisible(false);
            textField_1.setVisible(false);
            vareNrJList.setVisible(false);
            }
        });       

        final JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 235, 100, 20);
        frame.getContentPane().add(scrollPane);

    table = new JTable(new Object[0][2], new String[] {"VareNr", "Beskrivelse"});
    scrollPane.setViewportView(table);

    VareEnhed[] alleVarer = Vare.hentVareListe(); // Hent alle varer
    for(int i =0; i < alleVarer.length; i++){
        VareEnhed v = alleVarer[i];
 
        table.setValueAt(v.getVareNr(), i, 0);
        table.setValueAt(v.getbeskrivelse(), i, 1);
    }
Avatar billede renebmadsen Nybegynder
09. april 2007 - 12:07 #12
nu sker der noget, men får desværre ikke mine date ind kun felt navn vareNr og beskrivelse...
og så får jeg en fejl


Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
    at javax.swing.JTable$1.setValueAt(Unknown Source)
    at javax.swing.JTable.setValueAt(Unknown Source)
    at DirektorGUI.initialize(DirektorGUI.java:217)
Avatar billede _carsten Nybegynder
09. april 2007 - 12:13 #13
Min fejl - tabellen tilføjer ikke nye rækker automatisk, hvilket bringer os tilbage til tablemodellen som måske bliver nødvendig at lave.

Men til at starte med må så du gøre dette


.....
.....
....
        visAlleMedarbejdereRadioButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent arg0) {visAlleMedarbejdereTextField.setVisible(true);
            visAlleOrdreTextField.setVisible(false);
            textField_1.setVisible(false);
            vareNrJList.setVisible(false);
            }
        });       

        final JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 235, 100, 20);
        frame.getContentPane().add(scrollPane);

    VareEnhed[] alleVarer = Vare.hentVareListe(); // Hent alle varer

    table = new JTable(new Object[alleVarer.length][2], new String[] {"VareNr", "Beskrivelse"});
    scrollPane.setViewportView(table);


    for(int i =0; i < alleVarer.length; i++){
        VareEnhed v = alleVarer[i];
 
        table.setValueAt(v.getVareNr(), i, 0);
        table.setValueAt(v.getbeskrivelse(), i, 1);
    }
Avatar billede renebmadsen Nybegynder
09. april 2007 - 12:20 #14
super så der info i Jtable
du smider bare et svar mange tak for det
Avatar billede _carsten Nybegynder
09. april 2007 - 12:21 #15
OK - alternativet med tablemodel!



    table = new JTable(new Object[0][2], new String[] {"VareNr", "Beskrivelse"});
    table.setModel(new TableTableModel());
    scrollPane.setViewportView(table);


Og modellen



import java.util.ArrayList;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;


        class TableTableModel extends AbstractTableModel {
            private static final long serialVersionUID = 1L;
            public final String[] COLUMN_NAMES = new String[] {"VareNr", "Beskrivelse"};
           
            private ArrayList<Vector> data = new ArrayList<Vector>();
            private Vector row = new Vector();
           
           
            public int getRowCount() {
                return data.size();
            }
           
            public int getColumnCount() {
                return COLUMN_NAMES.length;
            }
           
            public String getColumnName(int columnIndex) {
                return COLUMN_NAMES[columnIndex];
            }
           
           
            public Object getValueAt(int rowIndex, int columnIndex) {
                Vector v = data.get(rowIndex);
               
                return v.get(columnIndex);
            }
           
            public void setValueAt(Object obj, int row, int column){
                if(row >= data.size() ){
                    addRow();
                }
               
                Vector v = data.get(row);
                v.setElementAt(obj, column);
            }
           
            public Class getColumnClass(int col){
                return String.class;
            }
           
            public boolean isCellEditable(int rowIndex, int col) {
                return false;
            }

            private void addRow(){
                Vector v = new Vector();
                v.add("");
                v.add("");
                data.add(v);
            }
        }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester