首页 文章

将JPanel设置为与其包含的JTable相同的大小

提问于
浏览
0

我有一个包含在JPanel中的JScrollPane中的JTable,它包含在JFrame中 . 我使用了NetBeans GUI构建器,因此下面隐藏了一些自动生成的代码 .

PanelWithTable.java

public class PanelWithTable extends javax.swing.JPanel {

    public PanelWithTable() {
        initComponents();
    }

    public JTable getTable() {
        return jTable1;
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(jTable1.getWidth(), jTable1.getHeight());
    }
    ...
    //Generated code
    ...
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
}

OuterFrame.java

public class OuterFrame extends javax.swing.JFrame {

    public OuterFrame() {
        initComponents();
        panelWithTable1.getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        for (int i = 0, n = panelWithTable1.getTable().getColumnModel().getColumnCount(); i < n; i++) {
            panelWithTable1.getTable().getColumnModel().getColumn(i).setPreferredWidth(16);
        }
        pack();
    }

    public PanelWithTable getPanelWithTable() {
        return panelWithTable1;
    }
    ...
    //Generated code
    ...
    private main.PanelWithTable panelWithTable1;
}

如果我不覆盖 getPreferredSize() ,它看起来像这样:

我希望JPanel与JTable的大小相同,因此它不显示边框 . 当重写 getPreferredSize() 时,它看起来像这样:

它略小于表格,它会切断最后一行和一列 . 如何才能正确地使JPanel与JTable的大小相同?

3 回答

  • 1

    由于您可以轻松使用netbeans,因此可以将 jtable 拖到 jpanel 的角落 . Netbeans将处理其余的东西 . 尝试这个建议,看看那里生成的代码 . 然后你可以按照你想要的方式修改它 .

  • 1
    • JTable 里面 JScrollPane

    JTable 设置 PreferredScrollableViewportSize 并将 JPanel 的默认值 FlowLayout 更改为 GridBagLayout (设置填充为 GridBagConstraints.HORIZONTAL )或最终使用 BorderLayout ,将 JScrollPane 更改为 CENTER 区域

    • JTable 放入 JPanel

    要将 JPanel 的默认值 FlowLayout 更改为 GridBagLayout (设置填充为 GridBagConstraints.HORIZONTAL )或最终使用 BorderLayout ,将 JTable 更改为 CENTER 区域

    • 更好地帮助发布 SSCCE / MCVE ,简短,可运行,可编辑
  • 3

    我有一个包含在JFrame中的JPanel中的JTable .

    • JTable 应该添加到 JScrollPane

    • 然后在 JPanel 中添加 JScrollPane

    • 并最终在 JFrame 中添加 JPanel

    Note: 如果使用正确的布局管理器,则无需设置首选大小 . 默认情况下,组件在滚动窗格中进行调整 .

    有关更多信息,请查看How to Use Tables上的Swing教程

    示例代码:

    JTable table=new JTable();
    JScrollPane scrollPane=new JScrollPane(table);
    
    JPanel panel=new JPanel();
    panel.add(scrollPane);
    
    frame.add(panel);
    

相关问题