我正在试图做的是我创建JTable
的新实例中JPanel
,并JFrame
和我在添加在表中的行得到的错误:
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) { }
在表中的添加行中发生错误
这里的问题是你正在调用JTable(Object[][], Object[])
构造函数.如果你查看该链接中的源代码,你可以看到它在JTable(TableModel)
内部调用构造函数,构造了一个匿名实例AbstractTableModel
,该getModel()
方法返回的是- 这不能转换为DefaultTableModel
.
但是:无论如何,你在这里尝试做什么都行不通.你是说数据的行由零元素数组表示:
Object[][] data = {};
您将无法向此添加行,因为您无法在构造后调整数组大小.
而不是这个,你应该构造一个显式DefaultTableModel
:
TableModel tableModel = new DefaultTableModel(column, rowCount);
然后用它来构造JTable
:
JTable toDoTable = new JTable(tableModel) { ... }
我根本不熟悉swing,但它看起来像是DefaultTableModel
由Vector
行数据支持,所以你不需要知道rowCount
前面的确切值.