Ich hätte gerne eine JTable, bei der die Anzahl der Spalten festgelegt ist, die Anzahl der Zeilen ändert sich jedoch (mal werden es mehr, mal weniger). Ich habe natürlich auch schon gegoogelt und die Codes ausprobiert, die Ich da gefunden habe, aber entweder konnte Ich den Code nicht in mein Programm einbauen oder er war irgendwie fehlerhaft. Also, kann mir einer sagen, wie man (mit so wenig Codezeilen wie möglich) zu einer JTable eine Row hinzufügt bzw. entfernt?
Die JTable ist nur eine View. Du musst ein TableModel verwenden (für den Anfang am besten ein DefaultTableModel) und dort kannst du bequem neue Reihen hinzufügen.
Es hat prima funktioniert. Nur eine kleine "Nebenwirkung" ist aufgetreten. Ich habe das JList jetzt durch ein JTable ersetzt und weiterhin das GridBagLayout verwendet. Das Programm hat sein Aussehen nun wie folgt geändert:
Vorher (mit JList):
Nachher (mit JTable):
Die Textfelder (oben) sind nun schmaler und höher geworden, obwohl Ich das garnicht wollte. Könnt ihr da irgendwas drüber sagen ohne den Code zu sehen...? Ein Verdacht oder so?
OK, Ich bin jetzt mal von DefaultTableModel auf AbstractTableModel umgestiegen. Hier mal ein kleiner Ausschnitt:
Code:
String[] cols= {"Typ","Name","Größe"};
TableModel dataModel = new AbstractTableModel()
{
public int getColumnCount() { return 3; }
public int getRowCount() { return 1; }
public Object getValueAt(int row, int col) { return new Integer(row*col); }
public String getColumnName(int columnIndex) { return cols[columnIndex]; }
public void addRow(Object[] rowData) { };
};
JTable file_list = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(file_list);
Ich habe nun das problem, dass mir Methoden wie addRow oder removeRow nicht mehr zur Verfügung stehen. Wie ihr seht, habe Ich oben versucht, diese Methode hinzuzufügen, aber es hat nicht geklappt.
Hier, da du ja noch keine Daten in deinem Model speicherst, vielleicht hilft dir das:
Code:
final String[] cols= {"Typ","Name","Größe"};
TableModel dataModel = new AbstractTableModel()
{
private int rowCount=1;
public int getColumnCount() { return 3; }
public int getRowCount() { return rowCount; }
public Object getValueAt(int row, int col) { return new Integer(row*col); }
public String getColumnName(int columnIndex) { return cols[columnIndex]; }
public void addRow(Object[] rowData) { rowCount ++; super.fireTableDataChanged();};
};
JTable file_list = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(file_list);