简体   繁体   English

Java错误:javax.swing.JTable $ 1无法强制转换为javax.swing.table.DefaultTableModel

[英]Java Error : javax.swing.JTable$1 cannot be cast to javax.swing.table.DefaultTableModel

What I'm trying to do is I am creating a JTable inside a new instance of JPanel and JFrame and I am getting the error upon adding the rows in the table: 我正在尝试做的是我在JPanelJFrame的新实例中创建一个JTable ,我在添加表中的行时收到错误:

Object[] column = {"id", "title"};
Object[][] data = {};
JTable toDoTable = new JTable(data, column) {
  public Component prepareRenderer(TableCellRenderer renderer, int rowIndex,
      int columnIndex) {
       if(columnIndex == 1) {
          setFont(new Font("Arial", Font.BOLD, 12));
       } else {
           setFont(new Font("Arial", Font.ITALIC, 12));
       }

         return super.prepareRenderer(renderer, rowIndex, columnIndex);
  }
};


JScrollPane jpane = new JScrollPane(toDoTable);
JPanel panel = new JPanel();
JFrame frame = new JFrame();
frame.setSize(new Dimension(1100, 408));
frame.setTitle("JTable Font Setting Example");
panel.add(jpane);
frame.add(new JScrollPane(panel));
frame.setVisible(true);

// Add rows in the Table
DefaultTableModel model = (DefaultTableModel)toDoTable.getModel();
ConnectMSSQLServer connServer = new ConnectMSSQLServer();
ResultSet rs = connServer.dbConnect();
  try
   {
      while (rs.next()) {
          String id = rs.getString("id");
          String title = rs.getString("title");
          model.addRow(new Object[]{id, title});
      }
    }
    catch(Exception e)
    {

    }

The error occurs in the add rows in table 在表中的添加行中发生错误

Your problem here is that you are invoking the JTable(Object[][], Object[]) constructor. 这里的问题是你正在调用JTable(Object[][], Object[])构造函数。 If you check out the source code in that link, you can see that it is invoking the JTable(TableModel) constructor internally, having constructed an anonymous instance of AbstractTableModel , which is what is returned by the getModel() method - this can't be cast to a DefaultTableModel . 如果你查看该链接中的源代码,你可以看到它在内部调用了JTable(TableModel)构造函数,构造了一个AbstractTableModel的匿名实例,这是getModel()方法返回的 - 这不能被强制转换为DefaultTableModel

However: what you are trying to do here won't work anyway. 但是:无论如何,你在这里尝试做什么都行不通。 You are saying that the rows of the data are represented by a zero-element array: 你是说数据的行由零元素数组表示:

Object[][] data = {};

You will not be able to add rows to this, because you can't resize an array once constructed. 您将无法向此添加行,因为您无法在构造后调整数组大小。

Instead of this, you should construct an explicit DefaultTableModel : 而不是这个,你应该构造一个显式的DefaultTableModel

TableModel tableModel = new DefaultTableModel(column, rowCount);

and then use this to construct the JTable : 然后使用它来构造JTable

JTable toDoTable = new JTable(tableModel) { ... }

I am not familiar with swing at all, but it looks like DefaultTableModel is backed by a Vector for the row data, so you don't need to know the exact value of rowCount up front. 我根本不熟悉swing,但看起来DefaultTableModel由行数据的Vector支持,所以你不需要rowCount知道rowCount的确切值。

Consider this slightly changed code: 考虑这个稍微改变的代码:

    //Create the new model for the table
    DefaultTableModel model = new DefaultTableModel();

    ConnectMSSQLServer connServer = new ConnectMSSQLServer();
    //Try with catch for auto-closing result set
    try(ResultSet rs = connServer.dbConnect()) {
        while (rs.next()) {
            String id = rs.getString("id");
            String title = rs.getString("title");
            model.addRow(new Object[] { id, title });
        }
    } catch (Exception e) {
        //HANDLE THIS!
    }
    //Now populate the table with the new model
    toDoTable.setModel(model);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 org.jdesktop.swingbinding.JTableBinding $ BindingTableModel无法转换为javax.swing.table.DefaultTableModel - org.jdesktop.swingbinding.JTableBinding$BindingTableModel cannot be cast to javax.swing.table.DefaultTableModel 线程“AWT-EventQueue-0”中的异常 java.lang.ClassCastException:javax.swing.JTable - Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: javax.swing.JTable javax.swing.JComboBox无法强制转换为javax.swing.ComboBoxModel - javax.swing.JComboBox cannot be cast to javax.swing.ComboBoxModel 如何解决此错误“java.lang.ClassCastException: javax.swing.JList$3 无法转换为 javax.swing.DefaultListModel” - How to resolve this error “java.lang.ClassCastException: javax.swing.JList$3 cannot be cast to javax.swing.DefaultListModel” javax.swing.JPanel无法转换为javax.swing.JLayeredPane - javax.swing.JPanel cannot be cast to javax.swing.JLayeredPane Java异常:java.lang.ClassCastException:javax.swing.Timer无法转换为javax.swing.JButton - Java exception: java.lang.ClassCastException: javax.swing.Timer cannot be cast to javax.swing.JButton class 无法转换为 class javax.swing.tree.DefaultTreeCellRenderer 错误 - class cannot be cast to class javax.swing.tree.DefaultTreeCellRenderer error JButton无法转换为javax.swing.JComboBox - JButton cannot be cast to javax.swing.JComboBox [B 不能转换为 javax.swing.ImageIcon - [B cannot be cast to javax.swing.ImageIcon Nimbus:java.lang.ClassCastException:javax.swing.plaf.nimbus.DerivedColor $ UIResource无法强制转换为javax.swing.Painter - Nimbus: java.lang.ClassCastException: javax.swing.plaf.nimbus.DerivedColor$UIResource cannot be cast to javax.swing.Painter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM