运行代码时出错,你能帮我解决问题吗?
当我在kindnummer
JTextField
中写1时,这有效但当我将值更改为2或3时,我会显示错误:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2
我的TableModel
班级:
public class listtable extends AbstractTableModel{
BusinessDelegate bd= new BusinessDelegate();
JTextField t= new JTextField();
private final String[] entetes = { "Name", "Vorname", "Geburtsdatum", "Geschlecht" };
String rr=t.getText();
private List<Kiwikinder> cc = bd.getRemoteEjb().getKiwidinderbyNummerFindbyId(1);
public listtable(List<Kiwikinder> cc) {
this.cc = new ArrayList<>(cc);
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
@Override
public int getColumnCount() {
// TODO Implement this method
return entetes.length;
}
@Override
public String getColumnName(int columnIndex) {
// TODO Implement this method
return entetes [columnIndex];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Kiwikinder kk= cc.get(rowIndex);
Object value = null;
switch(columnIndex) {
case 0:
value= kk.getName();
break;
case 1:
value=kk.getVorname();
break;
case 2:
value= kk.getGeburtsdatum();
break;
case 3:
value= kk.getGeschlecht();
break;
}
return value;
}
@Override
public boolean isCellEditable(int i, int i2) {
// TODO Implement this method
return true;
}
@Override
public void setValueAt(Object object, int i, int i2) {
Kiwikinder hh=cc.get(i);
if (i2==0)
hh.setName((String)object);
else if (i2==1)
hh.setVorname((String)object);
else if (i2==2)
hh.setGeburtsdatum((Date)object);
if (i2==3)
hh.setGeschlecht((String)object);
fireTableCellUpdated(i,i2);
}
@Override
public int getRowCount() {
return cc.size();
}
public void updateRow(int index,String[] values)
{
for (int i = 0 ; i < values.length ; i++)
{
setValueAt(values[i],index,i);
}
}
}
我的第二课:
public class tabbedPane extends JFrame implements ActionListener {
BusinessDelegate businessDelegate = new BusinessDelegate();
private JTabbedPane tabbedPane;
private JPanel panel1, panel2, panel3;
private JButton kindsuchen;
private JTextField kindernummer;
Kiwiantraagsteller ant = new Kiwiantraagsteller();
InputVerifier verifier = new Verifier();
private listtable model;
private JTable table;
public tabbedPane() {
setTitle("Kindergeld");
setSize(700, 800);
setBackground(Color.gray);
kindsuchen = new JButton("suchen");
JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
getContentPane().add(topPanel);
// Create the tab pages
createPage1();
createPage2();
createPage3();
// Create a tabbed pane
tabbedPane = new JTabbedPane();
tabbedPane.addTab("Neuer Antragsteller stellen", panel1);
tabbedPane.addTab("Neues Kind stellen ", panel2);
tabbedPane.addTab("Suchen Kindergeldfall", panel3);
topPanel.add(tabbedPane, BorderLayout.CENTER);
}
public void createPage1() {
panel1 = new JPanel()
panel1.setLayout(null);
}
public void createPage2() {
panel2 = new JPanel();
panel2.setLayout(null);
}
public void createPage3() {
kindernummer = new JTextField();
panel3 = new JPanel();
panel3.setLayout(null);
JLabel label12 = new JLabel("Kindergeldnummer:");
label12.setBounds(10, 20, 150, 20);
panel3.add(label12);
table= new JTable();
kindernummer.setBounds(150, 20, 200, 20);
kindsuchen.addActionListener(this);
panel3.add(kindernummer);
kindsuchen.setBounds(350, 40, 90, 25);
panel3.add(kindsuchen);
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
BusinessDelegate businessDelegate = new BusinessDelegate();
if (actionEvent.getSource() == kindsuchen) {
String tr = kindernummer.getText();
Integer g = Integer.valueOf(tr);
List <Kiwikinder> cc = businessDelegate.getRemoteEjb().getKiwidinderbyNummerFindbyId(g);
model = new listtable(cc); table = new JTable(model);
table.setModel(model);
table.setBounds(10, 50, 200, 20);
JScrollPane tableContainer = new JScrollPane(table);
tableContainer.setBounds(10, 80, 600, 150);
panel3.add(tableContainer, BorderLayout.CENTER);
table.setAutoCreateRowSorter(true);
}
table.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
}
});
}
public static void main(String args[]) {
// Create an instance of the test application
tabbedPane bb = new tabbedPane();
bb.setVisible(true);
}
}
答案 0 :(得分:0)
问题是,您的数组太小,程序试图在String数组中的不存在的位置写入。你有机会解决你的问题:
1。)选择一个更大的字符串数组。
2.)选择ArrayList而不是String Array。您可以像这样初始化ArrayList:
ArrayList<String> yourArrayList = new ArrayList<String>();