【发布时间】:2016-03-13 08:56:45
【问题描述】:
一个多星期以来,我一直在使用 JTable 组件时遇到问题。希望你能指出我正确的方向。
在 JInternalFrame 表单中,我有一个这样创建的 JTable(在 NetBeans 自动生成的代码中):
jScrollPane1 = new javax.swing.JScrollPane();
tblData = new javax.swing.JTable();
jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane1.setMaximumSize(new java.awt.Dimension(468, 167));
jScrollPane1.setMinimumSize(new java.awt.Dimension(468, 167));
jScrollPane1.setPreferredSize(new java.awt.Dimension(453, 167));
tblData.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N
tblData.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"ID Empresa", "Código Empresa", "Nombre de la Empresa"
}
));
tblData.setFillsViewportHeight(true);
tblData.setIntercellSpacing(new java.awt.Dimension(5, 5));
tblData.setMaximumSize(new java.awt.Dimension(300, 100));
tblData.setMinimumSize(new java.awt.Dimension(300, 100));
tblData.setName(""); // NOI18N
tblData.setPreferredSize(new java.awt.Dimension(300, 100));
tblData.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane1.setViewportView(tblData);
表tblData 由正确加载的ResultSet 填充(数据已通过System.out.println() 验证)。现在,问题是一旦检索到数据,就会调用一个函数来“刷新”表,如下所示:
private void prepareTable(boolean isEmpty) {
String[] colHeadings = {"ID Empresa","Código Empresa","Nombre de la Empresa"};
DefaultTableModel model = new DefaultTableModel();
tblData.setPreferredScrollableViewportSize(tblData.getPreferredSize());
try {
if (isEmpty) {
model.setColumnIdentifiers(colHeadings);
tblData.setModel(model);
} else {
Verbo.rs.beforeFirst();
tblData.setModel(DbUtils.resultSetToTableModel(Verbo.rs));
}
} catch (SQLException se) {
}
((DefaultTableModel) tblData.getModel()).fireTableStructureChanged();
}
问题是,虽然行被检索并加载到表模型中,但表的垂直滚动条即使显示也不起作用,因此只显示第一条记录。
我正在做的事情有什么明显的错误吗?请帮助我,因为我已经搜索过,这里和其他网站上的所有答案都没有用。
提前谢谢你。
【问题讨论】:
-
你应该处理异常。也许它会给你关于正在发生的事情的信息。
-
感谢@YassinHajaj 的评论,我添加了一般异常,但没有抛出任何异常。显然没有发生错误。
-
请发mcve。
-
不要使用 tblData.setPreferredScrollableViewportSize(tblData.getPreferredSize());或 ((DefaultTableModel) tblData.getModel()).fireTableStructureChanged()
-
不要使用 setPreferred/Minimum/MaximumSize,它会严重影响你
标签: java swing jtable jscrollpane tablemodel