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

时间:2014-07-31 09:46:18

标签: java swing jpanel

我有一个包含在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 个答案:

答案 0 :(得分:3)

  1. JTable内的JScrollPane

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

  2. JTable置于JPanel

    FlowLayout的默认JPanel更改为GridBagLayout(设置为GridBagConstraints.HORIZONTAL}或最终使用BorderLayout,将JTable更改为CENTER SSCCE区域

  3. 更快地发布MCVE / {{1}},简短,可运行,可编辑

答案 1 :(得分:1)

  

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

  • JTable应添加到JScrollPane
  • 然后在JScrollPane
  • 中添加JPanel
  • 最后在JPanel
  • 中添加JFrame

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

有关详细信息,请查看How to Use Tables

上的 Swing Tutorial

示例代码:

JTable table=new JTable();
JScrollPane scrollPane=new JScrollPane(table);

JPanel panel=new JPanel();
panel.add(scrollPane);

frame.add(panel);

答案 2 :(得分:1)

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