线程"main" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0 defaultTableModel Java



我想在JTable中保存和显示数据库中的数据,并尝试使用defaultTableModel。然而,我得到:

ArrayIndexOutOfBoundsException at com.mycompany.bazadanych.main.main(main.java:40) (line with ** **). 

是否有一种方法可以预定义JTable中的列/行数,并简单地将数据传递给它们?

public static void main(String[] args) {
bazaDanych BazaDanych = new bazaDanych();
DefaultTableModel tableModel = new DefaultTableModel();
JTable table = new JTable(tableModel);
tableModel.setColumnCount(3);

try {
//BazaDanych.wstawDane("STUDENCI", "Kowalski", "Jan");
//BazaDanych.wstawDane("STUDENCI", "Wiśniewski", "Piotr");
//BazaDanych.wstawDane("STUDENCI", "Nowak", "Michał");
BazaDanych.usunDane("STUDENCI", "Nowak", "Michał");
} catch (SQLException ex) {
ex.printStackTrace();
}
List<Student> lista = BazaDanych.pobierzDane("STUDENCI");
BazaDanych.zamknijPolaczenie();
lista.forEach(s -> {
**table.setValueAt(s.getId(), s.getId(), 0);**
table.setValueAt(s.getNazwisko(), s.getId(), 1);
table.setValueAt(s.getImie(), s.getId(), 2);
//tableModel.addRow(new Object[] {s.getId(),  s.getNazwisko(), s.getImie()});
System.out.println(s.getId() + " " + s.getNazwisko() + " " + s.getImie());
});
table.updateUI();
//stable.setModel(tableModel);
JFrame frame = new JFrame("Demo program for JFrame");
frame.setLayout(null);
frame.add(table);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.pack();
}
}

是否有一种方法可以预定义JTable中的列/行数,并简单地将数据传递给它们?

你怎么知道表的预定义大小应该是多少?

您的数据包含在学生列表中。更好的方法是:

  1. 创建自定义StudentTableModel。那么就不需要forEach循环了。您只需使用List<Student>创建模型。有关如何创建自定义模型的分步示例,请参阅行表模型。

  2. 使用DefaultTableModeladdRow(...)方法,如代码中所示。这意味着您需要去掉setValueAt(...)语句。

代码的其他问题:

  1. 不要使用updateUI()。当模型更新时,Swing组件将自动重新绘制自己。

  2. 不要使用null布局。Swing被设计为与布局管理器一起使用。

  3. JTable通常与JScrollPane一起使用,滚动窗格被添加到框架中。

相关内容

  • 没有找到相关文章

最新更新