Hallo,
warum übernimmt meine JTable nachdem ich im Tablemodel die Captions (getCoumnlCount() gibt eine andere anzahl zurück) die neue struktur nicht?
Nach dem ändern rufe ich zudem jtable.revalidate() .repaint() auf.
Ich habe auch es auch schon mit jtable.fireProperty( "TableStructureChanged"); versucht.
Hat jemand eine Idee?
Ich habe das Problem in einen kurzen ausführbaren beispielcode gepackt:
warum übernimmt meine JTable nachdem ich im Tablemodel die Captions (getCoumnlCount() gibt eine andere anzahl zurück) die neue struktur nicht?
Nach dem ändern rufe ich zudem jtable.revalidate() .repaint() auf.
Ich habe auch es auch schon mit jtable.fireProperty( "TableStructureChanged"); versucht.
Hat jemand eine Idee?
Ich habe das Problem in einen kurzen ausführbaren beispielcode gepackt:
Code:
import java.awt.ScrollPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
public class Starter extends JFrame{
public static void main (String[] args)
{
new Starter();
}
private TableModel model = new TableModel();
private JTable table = new JTable(model);
public Starter() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(new JScrollPane(table));
pack();
setVisible(true);
// Jetzt kommt die änderung der Tabellenstruktur
model.setBuchstaben(true);
table.revalidate();
table.repaint();
}
}
class TableModel implements javax.swing.table.TableModel
{
private String[] buchstaben = { "A", "B", "C", "D" };
private String[] zahlen = { "1", "2" };
private String[] captions = zahlen;
public void addTableModelListener(TableModelListener l) {}
public Class<?> getColumnClass(int columnIndex) { return String.class; }
public int getColumnCount() { return captions.length; }
public String getColumnName(int columnIndex) { return captions[columnIndex]; }
public int getRowCount() { return 5; }
public Object getValueAt(int rowIndex, int columnIndex) { return "Text"; }
public boolean isCellEditable(int rowIndex, int columnIndex) { return false; }
public void removeTableModelListener(TableModelListener l) {}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {}
/**
* Ändert ggf. die Captions. (Dadurch wird auch getcolumnCount() beeinflusst.
* @param isBuchstaben
*/
public void setBuchstaben(boolean isBuchstaben)
{
captions = isBuchstaben ? buchstaben : zahlen;
}
}