J
Jens
Gast
Ich hab folgendes Problem.
ich zeig euch einfach mal meinen Code:
Jetzt zu meinem Problem:
Wie ihr sehen könnt hab ich zwei Table Models in meinem Frame.
Ich möchte das Frame so aufbauen das sobald es geöffnet wird das erste TableModel mit daten aus ner datenbank gefüllt wird. Das funktioniert auch.
Das zweite TableModel soll beim öffnen des Frames schon angezeigt werden aber noch nicht gefüllt sein.
Erst wenn ich den Button "showTablesButton" drücke soll das zweite Table Model gefüllt werden.
Ich weis aber nicht wo ich das zweite TableModel einbaue so das es beim öffnen leer angezeigt wird und dann beim button drücken gefüllt wird. Ich hab es zuerst im Konstruktor (siehe oben) eingefügt aber da krieg ich natürlich ne Null Pointer Exception weil ich noch keine Daten hab. Um die Daten zu kriegen muss ich nämlich aus dem ersten Table einen eintrag mit der maus auswählen und dann den "showTablesButton" drücken um die Daten aus der Datenbank zu bekommen.
Vielleicht kann mir ja jemand weiterhelfen.
Vielen Dank.
PS: wenn noch fragen zum code sind dann meldet euch
ich zeig euch einfach mal meinen Code:
Code:
public class TablePoolInputScreen extends JInternalFrame
{
Database database;
TablePool[] allTablePools;
TableDescriptor[] tablesTablePool;
TabPool tabPool;
Tab tab;
JTable table, table2;
public TablePoolInputScreen(Database database)
{
super("Tabellenpools",
true, //resizable
true, //closable
false, //maximizable
true);//iconifiable);
this.database = database;
try
{
// Methode aus DBMUpdateMode wird aufgerufen.
// Array mit allen Aktualisierungsschlüsseln wird erstellt
allTablePools = new DBMTablePool().makeAllTablePools(database);
}
catch(Exception e)
{
e.printStackTrace();
}
// neuer Container für die GUI wird erstellt
Container contentPane = getContentPane();
// dem Container wird ein Layout zugeordnet
contentPane.setLayout(new BoxLayout(contentPane,3));
// Table Models werden erstellt
tabPool = new TabPool();
table = new JTable(tabPool);
// Table Models werden erstellt
tab = new Tab();
table2 = new JTable(tab);
try
{
// Table Models werden erstellt
tab = new Tab();
table2 = new JTable(tab);
}
catch(NullPointerException e)
{
JOptionPane.showMessageDialog(table2, "DBADT-GUI (C)2004 by Jens Lucaßen", "About", JOptionPane.ERROR_MESSAGE);
}
// Scroll Panes werden den Table Models zugeordnet
contentPane.add(new JScrollPane(table), BorderLayout.CENTER);
contentPane.add(new JScrollPane(table2), BorderLayout.CENTER);
contentPane.add(new ShowTables(), BorderLayout.SOUTH);
contentPane.add(new ControlPanel(), BorderLayout.SOUTH);
}
//--------------------------------------------------------------------------------------------------------
/*
* Control Panel für die Buttons wird erstellt und dem Frame hinzugefügt
*/
class ControlPanel extends JPanel implements ActionListener
{
int row, col;
Object value = new Object();
JButton saveButton = new JButton("Übernehmen");
JButton rejectButton = new JButton("Verwerfen");
public ControlPanel()
{
GridLayout gridLay = new GridLayout(0, 2);
setLayout(gridLay);
saveButton.setToolTipText("Änderungen in der Tabelle werden in der Datenbank gespeichert");
rejectButton.setToolTipText("Änderungen werden rückgängig gemacht");
add(saveButton);
add(rejectButton);
saveButton.addActionListener(this);
rejectButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
try
{
if (source == saveButton)
{
}
if (source == rejectButton)
{
allTablePools = new DBMTablePool().makeAllTablePools(database);
tabPool.fireTableDataChanged();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
//--------------------------------------------------------------------------------------------------------
/*
* Button wird erstellt und dem Frame hinzugefügt
* Die Tabellen die zum selektierten Tabellen-Pool gehören werden angezeigt
*/
class ShowTables extends JPanel implements ActionListener
{
int row, col;
Object value = new Object();
JButton showTablesButton = new JButton("Tabellen anzeigen");
public ShowTables()
{
GridLayout gridLay = new GridLayout(0, 1);
setLayout(gridLay);
showTablesButton.setToolTipText("Änderungen in der Tabelle werden in der Datenbank gespeichert");
add(showTablesButton);
showTablesButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
int zeile, spalte;
String value;
try
{
if (source == showTablesButton)
{
zeile = table.getSelectedRow();
spalte = table.getSelectedColumn();
value = ((String)tabPool.getValueAt(zeile,spalte));
//System.out.println(value.substring(value.length()- 3, value.length() - 1));
Integer a = new Integer(value.substring(value.lastIndexOf('(') + 1, value.lastIndexOf(')')));
System.out.println("ID: " + a);
try
{
// Methode aus DBMTablePool wird aufgerufen.
// Array mit allen Tabellen für den übergebenen TabellenPool wird erstellt
tablesTablePool = new DBMTablePool().makeTables(database,a);
}
catch(Exception e)
{
e.printStackTrace();
}
for (int zaehler = 0; zaehler < tablesTablePool.length; zaehler++)
System.out.println("tablesTablePool: " + tablesTablePool[zaehler].getId());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
//-----------------------------------------------------------------------------------------------------------
/*
* Table Model für die Tabellen Pools wird erstellt.
* Es wird dabei der Name angezeigt
*/
class TabPool extends AbstractTableModel
{
final String[] columnNames = {"Tabellen Pool (ID)"
};
public boolean isCellEditable(int row, int column)
{
return true;
}
public int getColumnCount()
{
return columnNames.length;
}
public int getRowCount()
{
return allTablePools.length;
}
public String getColumnName(int col)
{
return columnNames[col];
}
public Object getValueAt(int row, int col)
{
switch (col)
{
case 0:
return allTablePools[row].getName() + " (" + allTablePools[row].getId() + ")";
default: return null ;
}
}
public void setValueAt(Object value, int row, int col)
{
if ( col == 0 )
allTablePools[row].setName((String)value);
fireTableCellUpdated(row, col);
}
}
//-----------------------------------------------------------------------------------------------------------
/*
* Table Model für die Tabellen die zum selektierten Tabellen Pool gehören wird erstellt.
* Es wird dabei der Name angezeigt
*/
class Tab extends AbstractTableModel
{
final String[] columnNames = {"Tabellen"
};
public int getColumnCount()
{
return columnNames.length;
}
public int getRowCount()
{
//return tablesTablePool.length;
return 1;
}
public String getColumnName(int col)
{
return columnNames[col];
}
public Object getValueAt(int row, int col)
{
switch (col)
{
case 0:
return tablesTablePool[row].getName();
default: return null ;
}
}
public void setValueAt(Object value, int row, int col)
{
if ( col == 0 )
tablesTablePool[row].setName((String)value);
fireTableCellUpdated(row, col);
}
}
}
Jetzt zu meinem Problem:
Wie ihr sehen könnt hab ich zwei Table Models in meinem Frame.
Ich möchte das Frame so aufbauen das sobald es geöffnet wird das erste TableModel mit daten aus ner datenbank gefüllt wird. Das funktioniert auch.
Das zweite TableModel soll beim öffnen des Frames schon angezeigt werden aber noch nicht gefüllt sein.
Erst wenn ich den Button "showTablesButton" drücke soll das zweite Table Model gefüllt werden.
Ich weis aber nicht wo ich das zweite TableModel einbaue so das es beim öffnen leer angezeigt wird und dann beim button drücken gefüllt wird. Ich hab es zuerst im Konstruktor (siehe oben) eingefügt aber da krieg ich natürlich ne Null Pointer Exception weil ich noch keine Daten hab. Um die Daten zu kriegen muss ich nämlich aus dem ersten Table einen eintrag mit der maus auswählen und dann den "showTablesButton" drücken um die Daten aus der Datenbank zu bekommen.
Vielleicht kann mir ja jemand weiterhelfen.
Vielen Dank.
PS: wenn noch fragen zum code sind dann meldet euch