Guten Tag,
ich habe ein Problem mit JTable bzw. AbstractTableModel irgendwie verstehe ich das ganze glaube ich noch nicht so richtig.
Ich initialisiere in meinem "view" 3 Tabelles die im ersten Augenblick bis auf den Kopf leer sind.
Nach einem Klick auf einen Button werden dann einige Methoden ausgeführt und [][]Arrays gefüllt
Diese sollen dann (eigentlich) in die Tabellen eingetragen und angezeigt werden.
Leider funktioniert das nicht, ich kriege die Tabellen nicht "refresht".
Testhalber habe ich die Tabellen nach der Bearbeitung nochmal an das Panel geadded um zu schauen ob diese richtig gefüllt werden. Das funktioniert auch. Nur wird dann mit jedem Klick auf den Button natürlich weitere Tabellen einfach angehängt.
Ich habe den Code mal etwas gekürzt und versuche so die Übersicht zu wahren.
Ich dachte mir also Das ich ja hierbei dann die Tabellen erzeuge und fülle sobald die Methode aufgerufen wird.
Hier noch die Klasse Tables
Ich habe schon einige Sachen dazu gelesen, scheine aber mit dem ganzen noch nicht so ganz zurecht zu kommen. Vll. kann mir ja jemand helfen.
Vielen Dank.
ich habe ein Problem mit JTable bzw. AbstractTableModel irgendwie verstehe ich das ganze glaube ich noch nicht so richtig.
Ich initialisiere in meinem "view" 3 Tabelles die im ersten Augenblick bis auf den Kopf leer sind.
Nach einem Klick auf einen Button werden dann einige Methoden ausgeführt und [][]Arrays gefüllt
Diese sollen dann (eigentlich) in die Tabellen eingetragen und angezeigt werden.
Leider funktioniert das nicht, ich kriege die Tabellen nicht "refresht".
Testhalber habe ich die Tabellen nach der Bearbeitung nochmal an das Panel geadded um zu schauen ob diese richtig gefüllt werden. Das funktioniert auch. Nur wird dann mit jedem Klick auf den Button natürlich weitere Tabellen einfach angehängt.
Ich habe den Code mal etwas gekürzt und versuche so die Übersicht zu wahren.
Java:
package view;
import ...
@SuppressWarnings("serial")
public class View extends JFrame
{
private JPanel viewTablesPanel = new View_Tables();
private JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
private JLabel label = new JLabel("View the loaded Tables form the Excel-Imports");
private JButton btnGenerate = new JButton("Generate");
private JTable table1;
private JTable table2;
private JTable table3;
private JPanel center = new JPanel();
private String[] th1 = {"test1","test1","test1","test1","test1","test1","test1"};
private String[] th2 = {"test2","test2","test2","test2"};
private String[] th3 = {"test3","test3","test3","test3","test3","test3"};
public View()
{
initForm();
}
private void initForm()
{
this.setTitle("Test");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(50, 50, 1200, 800);
viewTablesPanel.setLayout(new BorderLayout());
center.setLayout(new GridLayout(5,0));
//leere Tabellen erstellen mit Kopf von oben
String tableInf1[][] = new String[0][8];
String tableInf2[][] = new String[0][4];
String tableInf3[][] = new String[0][11];
table1 = new JTable(tableInf1,th1);
table2 = new JTable(tableInf2,th2);
table3 = new JTable(tableInf3,th3);
//Schriftzug + Button mit ActionListener um Methoden auszuführen
center.add(btnGenerate);
center.add(label);
//Tabellen Adden
center.add( new JScrollPane( table1 ) );
center.add( new JScrollPane( table2 ) );
center.add( new JScrollPane( table3 ) );
viewTablesPanel.add(center, BorderLayout.CENTER);
this.add(tabbedPane);
this.setVisible(true);
}
//Model führt Operationen aus, erzeugte [][]Arrays werden vom Controller an diese Methode
// übergeben
public void setTable(String[][]ti1,String[][]ti2,String[][]ti3)
{
//Tables Klasse unten (AbstractTableModel )
Tables tv1 = new Tables(ti1,th1);
table1 = new JTable(tv1);
Tables tv2 = new Tables(ti2,th2);
table2 = new JTable(tv2);
Tables tv3 = new Tables(ti3,th3);
table3 = new JTable(tv3);
// Aus Testzwecken... habe schon einiges versucht
this.invalidate();
this.repaint();
}
}
Ich dachte mir also Das ich ja hierbei dann die Tabellen erzeuge und fülle sobald die Methode aufgerufen wird.
Hier noch die Klasse Tables
Java:
package view;
import ...;
@SuppressWarnings("serial")
class Tables extends AbstractTableModel
{
public Object[][] values;
public Object columnNames[];
public Tables(Object[][] tr, Object th[])
{
values = tr;
columnNames = th;
}
public String getColumnName(int column)
{
return columnNames[column].toString();
}
public int getRowCount()
{
return values.length;
}
public int getColumnCount()
{
return columnNames.length;
}
public Object getValueAt(int row, int column)
{
return values[row][column];
}
}
Ich habe schon einige Sachen dazu gelesen, scheine aber mit dem ganzen noch nicht so ganz zurecht zu kommen. Vll. kann mir ja jemand helfen.
Vielen Dank.