我在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();
}
事情是,尽管检索行并将其加载到表模型中,但表的垂直滚动条即使显示也不起作用,因此只显示第一个记录。
我做的事情有什么明显的错误吗?请帮助我,因为我已搜索过,所有答案在这里和其他网站都没用。
提前谢谢。
答案 0 :(得分:3)
基本上,使用setPreferred/Minimum/MaximumSize
会导致问题,您也应该小心使用setPreferredScrollableViewportSize
并且永远不要使用组件的preferredSize
,因为这会使滚动窗格成为与组件大小相同。
您还可以查看Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?
答案 1 :(得分:0)
我知道也许这不是“最好的”解决方案,但出于绝望,我尝试了它并且它起作用了:
这次它的效果与预期的一样。