sisela
Erfahrenes Mitglied
Ich habe das Problem, dass ich an meiner Tabelle keine weitere Zeile anhängen kann.
Also ich erzeuge eine Tabelle, mit zunächst mit 10 leeren Zeilen. Wenn man auf einen Button "neuer Datensatz" klickt soll eine weitere Zeile hinzugefügt werden.
Ein paar Dinge sind komisch. Z.B. wird die Tabelle überhaupt nicht angezeigt, wenn ich nur das Model beim Erzeugen übergebe. Ich muss "table = new JTable(tmodel.data, tmodel.columnNames);" eingeben, damit sie überhaupt angezeigt wird.
Wenn ich nun auf den Button klicke, bekomme ich immer eine Exception (ganz unten abgebildet).
Weiterhin komisch: ist die Bedingung: "if( table.getModel() instanceof DefaultTableModel )"
denn da kommt das Programm nie rein obwohl dies wahr sein müsste
Vielleicht kann mir ja jemand helfen, stehe z.Z. ziemlich auf dem Schlauch
|Exception|
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 10 >= 10
Also ich erzeuge eine Tabelle, mit zunächst mit 10 leeren Zeilen. Wenn man auf einen Button "neuer Datensatz" klickt soll eine weitere Zeile hinzugefügt werden.
Ein paar Dinge sind komisch. Z.B. wird die Tabelle überhaupt nicht angezeigt, wenn ich nur das Model beim Erzeugen übergebe. Ich muss "table = new JTable(tmodel.data, tmodel.columnNames);" eingeben, damit sie überhaupt angezeigt wird.
Wenn ich nun auf den Button klicke, bekomme ich immer eine Exception (ganz unten abgebildet).
Weiterhin komisch: ist die Bedingung: "if( table.getModel() instanceof DefaultTableModel )"
denn da kommt das Programm nie rein obwohl dies wahr sein müsste
Vielleicht kann mir ja jemand helfen, stehe z.Z. ziemlich auf dem Schlauch
Code:
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
class ProductTable {
private JTable table = null;
private MyTableModel tmodel = null;
public void createProductTable() {
JPanel panel = new JPanel(new GridLayout(2,1));
JPanel buttonPanel = new JPanel(new FlowLayout());
tmodel = new MyTableModel();
table = new JTable(tmodel.data, tmodel.columnNames);
JScrollPane sp = new JScrollPane(table);
JButton b_newDataset = new JButton("neuer Datensatz");
b_newDataset.addActionListener(new ButtonListener());
buttonPanel.add(b_newDataset);
panel.add(sp);
panel.add(buttonPanel);
App.contentPanel.removeAll();
App.contentPanel.add(panel);
App.contentPanel.setVisible(true);
}
class MyTableModel extends DefaultTableModel {
private Object[][] data = null;
private String[] columnNames = null;
public MyTableModel() {
data = StoreApp.dataModel.productData.getProductData();
columnNames = StoreApp.dataModel.productData.getColumnNames();
}
public int getRowCount() {
return StoreApp.dataModel.productData.getProductNumbers();
}
public int getColumnCount() {
return 0;
}
public Object getValueAt(int arg0, int arg1) {
return null;
}
protected String[] getColumnNames() {
return columnNames;
}
protected void setColumnNames(String[] columnNames) {
this.columnNames = columnNames;
}
protected Object[][] getData() {
return data;
}
protected void setData(Object[][] data) {
this.data = data;
}
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "neuer Datensatz") {
// hier habe ich diverse Dinge ausprobiert die allerdings alle nicht zur Folge hatten
tmodel.insertRow(tmodel.getRowCount(), new Object[6]);
//tmodel.addRow(new Object[6]);
//in diese Schleife kam er nie rein aber wieso?
/*
if( table.getModel() instanceof DefaultTableModel ){
int cols = table.getModel().getColumnCount();
table.getModel().addRow(new Object[cols]);
}
*/
return;
}
}
}
}
|Exception|
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 10 >= 10