tak! glemte lige et spørgsmål til angående JTabbedPane. Hvilken metode skal man kalde hvis man fra faneblad 1 gerne vil blive sendt over til faneblad 3 efter et knap tryk event?
private class MyTableModel extends AbstractTableModel { private String[] columns = new String[] {"Id", "Navn"}; private ArrayList data;
public MyTableModel() { data = new ArrayList(); }
public int getColumnCount() { return columns.length; }
public int getRowCount() { return data.size(); }
public String getColumnName(int column) { return columns[column]; }
public MyObject getValueAt(int row) { return (MyObject)data.get(row); }
public Object getValueAt(int row, int column) { MyObject element = (MyObject) data.get(row);
switch (column) { case 0: return element.getId(); case 1: return element.getName(); } return null; }
public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); }
public boolean isCellEditable(int row, int column) { return true; // alle celler er editerbare }
public void setValueAt(Object value, int row, int column) { switch (column) { case 0: ((MyObject) data.get(row)).setName(value.toString()); case 1: ((MyObject) data.get(row)).setId(Integer.parseInt(value.toString())); } fireTableCellUpdated(row, column); }
public void addTableElement(MyObject element) { data.add(element); fireTableRowsInserted(data.size(), data.size()); }
public void removeTableElement(int index) { if (! (index == -1)) { data.remove(index); fireTableRowsDeleted(index, index); } }
public void removeAll() { int slut = data.size(); data.clear(); fireTableRowsDeleted(0, slut); } }
public static void main (String[] args) { new JTableTest().setVisible(true); } }
Det smarte ved ovenstående er, at godt nok skal man skrive sin egen TableModel, men når det er gjort, er det rigtig nemt at fylde data i.
case 0: ((MyObject) data.get(row)).setName(value.toString()); case 1: ((MyObject) data.get(row)).setId(Integer.parseInt(value.toString()));
Skal lige ændres til:
case 0: ((MyObject) data.get(row)).setId(Integer.parseInt(value.toString())); break; case 1: ((MyObject) data.get(row)).setName(value.toString()); break;
Jeg havde lige fået byttet rundt på dem og glemt en 'break' :)
1) JTablen tegner/viser sine værdier ved at gå ned i TableModel og spørge på: public Object getValueAt(int row, int column) - og derved hente værdierne.
2) Ja, det er nok. Du definerer i din tablemodel hvilke kolonner der skal være: private String[] columns = new String[] {"Id", "Navn"};
Hvis du anvender en TableModel er det ikke nødvendigt at have en array ved siden af. Det eneste du skal, er at tilføje dine objekter igennem tablemodel med add metoden.
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.