Resultset中的JTable不能垂直滚动

时间:2016-03-13 08:56:46

标签: java swing jtable jscrollpane tablemodel

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

}

事情是,尽管检索行并将其加载到表模型中,但表的垂直滚动条即使显示也不起作用,因此只显示第一个记录。

我做的事情有什么明显的错误吗?请帮助我,因为我已搜索过,所有答案在这里和其他网站都没用。

提前谢谢。

2 个答案:

答案 0 :(得分:3)

基本上,使用setPreferred/Minimum/MaximumSize会导致问题,您也应该小心使用setPreferredScrollableViewportSize并且永远不要使用组件的preferredSize,因为这会使滚动窗格成为与组件大小相同。

您还可以查看Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?

答案 1 :(得分:0)

我知道也许这不是“最好的”解决方案,但出于绝望,我尝试了它并且它起作用了:

  • 我只是从表单中删除了jTable和jScrollPane组件,并且这次只重新创建它们除了控件的大小以外,我没有改变它以满足我的需要;没有其他选择被篡改。

这次它的效果与预期的一样。