09. april 2007 - 09:31Der 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]);
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);
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();
/** * @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
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);
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); } }
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)
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); } }
Synes godt om
Ny brugerNybegynder
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.