Probleme mit TableModel

Athro

Mitglied
Hallo,
ich habe JTabale mit Tablemodel erstellt, nun möchte ich 2 verschieden Tabellen (die unterschiedliche Spaltenzahl haben) mit der erstellten (JTabale und Tablemodel) erzeugen.
Das klappt auch, aber ich bekomme ein Fehler und zwar wenn ich ich 3 Mal zwischen den Tabellen wechsele, d.h.: erstmal ruffe ich die 1 Tab. mit den größeren Spaltenzahl (19 Spalten) auf, dann die mit den weniger (13 Spalten), und dann rufe ich wider die Tab. mit den größeren Spaltenzahl, das Code dafür ist:
private TableModel getTableModel(){
tm = new AbstractTableModel() {
public int getRowCount() {
System.out.println(" in AbstractTableModel() --> getRowCount() data.length = " +data.length);
return data.length;
}
public int getColumnCount() {
System.out.println(" in AbstractTableModel() --> getColumnCount() spaltenNamen.length = " +spaltenNamen.length);
return spaltenNamen.length;
}
public String getColumnName(int col) {
System.out.println(" in AbstractTableModel() --> getColumnName(int col) spaltenNamen["+ col+"]= " +spaltenNamen[col]);
return spaltenNamen[col];
}
public Object getValueAt(int row, int col) {
System.out.println(" in AbstractTableModel() --> getValueAt(int row, int col) data["+row+"]["+col+"] = " +data[row][col]);
return data[row][col];
}
};
return tm;
}

private void erstellTabele(){
// holl das erzeugte Tabellenmodell
tm = getTableModel();
meinTabelle = new JTable(tm);
}
public void erstellTabGUI(Statement stmt, int tabTitelNr) {
JPanel topPanel = new JPanel();
// initialisiere die Tabelle
initialAll();
setFensterSize();
meinTabelle = new JTable();
Container con = getContentPane();
con.setLayout(new BorderLayout());
con.add(topPanel, BorderLayout.NORTH);
// Tabelle anlegen
fuelleTabAus(stmt, tabTitelNr);
// Darstellen von 'meinTabelle' mit den Inhalten
if (setTitel()){
// Das Titel erscheint als Fenstertitel, deshalb brauchen wir keine ekstra Label dafür
// c.add(new JLabel(hollTitel()), "North");
con.add(meinTabelle, BorderLayout.CENTER);
erstellTabele();
setDefaultTableColumn();
meinTabelle.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
meinTabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
meinTabelle.setEnabled(false);
JScrollPane scroller = new JScrollPane(meinTabelle);
con.remove(1);
con.add(scroller, BorderLayout.CENTER);
con.add(jPanelUnten, java.awt.BorderLayout.SOUTH);
jPanelUnten.add(jButtAbbr);
jButtAbbr.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
jPanelUnten.add(jButtDruck);
jButtDruck.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Druck die akteulle Tabelle
druckTabelle();
}
});
jPanelUnten.setBorder(BorderFactory.createRaisedBevelBorder());
jPanelUnten.setToolTipText("");
jButtAbbr.setFont(new java.awt.Font("Times", Font.PLAIN, 10));
jButtAbbr.setBorder(BorderFactory.createRaisedBevelBorder());
jButtAbbr.setText(" Abbrechen ");
jButtDruck.setFont(new java.awt.Font("Times", Font.PLAIN, 12));
jButtDruck.setBorder(BorderFactory.createRaisedBevelBorder());
jButtDruck.setText(" Tabele drucken ");
// Hauptfenster einrichten
if (tabTitelNr == 0){
setSize(500, 800);
}else{
setSize(getFensterBreite(), getFensterHoehe());
}
con.validate();
show();
}
}

Ergebnisse nach dem Aufruf der Tabelle mit der größeren Spaltzahl (19 Spalten):
in AbstractTableModel() --> getColumnCount() spaltenNamen.length = 19
in AbstractTableModel() --> getColumnName(int col) spaltenNamen[0]= Lll.
...
in AbstractTableModel() --> getColumnName(int col) spaltenNamen[18]= Oooo
in AbstractTableModel() --> getRowCount() data.length = 2
...
in AbstractTableModel() --> getValueAt(int row, int col) data[0][0] = 1
...
in AbstractTableModel() --> getValueAt(int row, int col) data[0][15] = 0.0
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getValueAt(int row, int col) data[1][0] = 2
...
in AbstractTableModel() --> getValueAt(int row, int col) data[1][15] = 0.0



Ergebnisse nach dem Aufruf der Tabelle mit der kleinen Spaltzahl (13 Spalten):

in AbstractTableModel() --> getColumnCount() spaltenNamen.length = 13
in AbstractTableModel() --> getColumnName(int col) spaltenNamen[0]= KKK
...
in AbstractTableModel() --> getColumnName(int col) spaltenNamen[12]= BBBB

in AbstractTableModel() --> getRowCount() data.length = 3
in AbstractTableModel() --> getValueAt(int row, int col) data[0][0] = 6
in AbstractTableModel() --> getValueAt(int row, int col) data[0][1] = RRRR
...
in AbstractTableModel() --> getValueAt(int row, int col) data[2][12] = 90


Ergebnisse nach dem 2 Aufruf der Tabelle mit der größeren Spaltzahl (19 Spalten):
in AbstractTableModel() --> getColumnCount() spaltenNamen.length = 19
in AbstractTableModel() --> getColumnName(int col) spaltenNamen[0]= Lll.
...
in AbstractTableModel() --> getColumnName(int col) spaltenNamen[18]= Oooo
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getValueAt(int row, int col) data[0][0] = 1
...
in AbstractTableModel() --> getValueAt(int row, int col) data[1][15] = 0.0
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getValueAt(int row, int col) data[0][0] = 1
...
in AbstractTableModel() --> getValueAt(int row, int col) data[0][12] = 77.3
in AbstractTableModel() --> getRowCount() data.length = 2
in AbstractTableModel() --> getValueAt(int row, int col) data[1][0] = 2
...
in AbstractTableModel() --> getValueAt(int row, int col) data[1][12] = 83.0


- Die Frage warum wird die Tabelle bis Spalte 15 beim ersten und zweiten Aufruf der Tabelle mit 19 Spalten (dennoch beim ersten Aufruf zeigt die Ergebnisse richtig) erzeugt?
- Warum wird die Tabelle beim 2 Wechsel (Aufruf der Tab mit 19 Spalten) zunächst bis 15 Spalten und dann bis 12 Spalten? und damit werden die Werte der Zelle der Tab. mit 19 Spalten für nur 13 Spalten gezeigt?
Die Bilder unten zeigen die Ergebnisse.

Danke
 

Anhänge

  • frag1.JPG
    frag1.JPG
    15,2 KB · Aufrufe: 18
  • frag2.JPG
    frag2.JPG
    14,1 KB · Aufrufe: 27
  • frag3.JPG
    frag3.JPG
    9,3 KB · Aufrufe: 18
Zuletzt bearbeitet:
Zurück