【问题标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0 defaultTableModel Java线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 >= 0 defaultTableModel Java
【发布时间】:2021-03-01 12:48:30
【问题描述】:

我想在 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();
}
}

【问题讨论】:

    标签: java swing jtable indexoutofboundsexception defaulttablemodel


    【解决方案1】:

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

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

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

    1. 创建自定义StudentTableModel。那么就不需要 forEach 循环了。您只需使用List&lt;Student&gt; 创建模型。有关如何创建自定义模型的分步示例,请参阅 Row Table Model

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

    代码的其他问题:

    1. 不要使用 updateUI()。 Swing 组件会在模型更新时自动重新绘制。

    2. 不要使用空布局。 Swing 旨在与布局管理器一起使用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多