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

Java 将JPanel设置为与其包含的JTable相同的大小,java,swing,jpanel,Java,Swing,Jpanel,我在JFrame中包含的JPanel中包含的JScrollPane中包含了一个JTable。我使用了NetBeans GUI构建器,因此一些自动生成的代码隐藏在下面 在PanelWithTable.java中: public class PanelWithTable extends javax.swing.JPanel { public PanelWithTable() { initComponents(); } public JTable getTa

我在JFrame中包含的JPanel中包含的JScrollPane中包含了一个JTable。我使用了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;
}
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;
}
OuterFrame.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;
}
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;
}
公共类OuterFrame扩展了javax.swing.JFrame{
公共外部框架(){
初始化组件();
panelWithTable1.getTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
对于(int i=0,n=panelWithTable1.getTable().getColumnModel().getColumnCount();i
如果我不重写
getPreferredSize()
它看起来像这样:

我希望JPanel与JTable的大小相同,这样就不会显示边框。重写
getPreferredSize()
时,如下所示:

它比表稍微小一点,并且它切断了最后一行和最后一列。如何正确地使JPanel与JTable的大小相同

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

  • JTable
    应添加到
    JScrollPane
  • 然后在
    JPanel
  • 最后在
    JFrame
注意:如果使用正确的布局管理器,则无需设置首选大小。默认情况下,组件会在滚动窗格中进行调整

有关更多信息,请参阅上的Swing教程

示例代码:

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

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

frame.add(panel);
我有一个包含在JFrame中的JPanel中的JTable

  • JTable
    应添加到
    JScrollPane
  • 然后在
    JPanel
  • 最后在
    JFrame
注意:如果使用正确的布局管理器,则无需设置首选大小。默认情况下,组件会在滚动窗格中进行调整

有关更多信息,请参阅上的Swing教程

示例代码:

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

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

frame.add(panel);
  • JTable
    内部
    JScrollPane

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

  • JTable
    放入
    JPanel

    要将
    JPanel
    的默认
    FlowLayout
    更改为
    GridBagLayout
    (将fill设置为
    GridBagConstraints.HORIZONTAL
    ),或最终使用
    BorderLayout
    ,请将
    JTable
    放在
    中心区域

  • 为了获得更好的帮助,请尽快发布一个简短、可运行、可编译的
    SSCCE
    /
    MCVE

  • JTable
    内部
    JScrollPane

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

  • JTable
    放入
    JPanel

    要将
    JPanel
    的默认
    FlowLayout
    更改为
    GridBagLayout
    (将fill设置为
    GridBagConstraints.HORIZONTAL
    ),或最终使用
    BorderLayout
    ,请将
    JTable
    放在
    中心区域

  • 为了获得更好的帮助,请尽快发布一个简短、可运行、可编译的
    SSCCE
    /
    MCVE


  • 由于您可以轻松地使用netbeans,因此可以将
    jtable
    拖动到
    jpanel
    的各个角落。Netbeans将处理其余的内容。试试这个建议,看看那里生成的代码。然后您可以按自己的方式修改它。

    因为您可以轻松地使用netbeans,所以您可以将
    jtable
    拖动到
    jpanel
    的各个角落。Netbeans将处理其余的内容。试试这个建议,看看那里生成的代码。然后您可以按照自己的方式修改它。

    因为您可以轻松地使用netbeans,所以您可以将jtable拖到jpanel的各个角落。Netbeans将处理其余的问题stuffs@ThusithaThilinaDayaratne但是在我的应用程序中,表可以有不同的大小,因此大小需要基于表的行和列。因此,您可以按照自己的方式修改它。@Thusitathilinadayaratne谢谢,尝试后它现在可以工作了。@Thusitahilinadayaratne如果您将您的评论变成一个答案,我将接受它。因为您很容易使用netbeans,您可以将jtable拖到jpanel的角落。Netbeans将处理其余的问题stuffs@ThusithaThilinaDayaratne但是在我的应用程序中,表可以有不同的大小,因此大小需要基于表的行和列。因此,您可以按自己的方式修改它。@ThusithaThilinaDayaratne谢谢,尝试后它现在可以工作了。@ThusithaThilinaDayaratne如果您将您的评论变成答案,我将接受它。JTable包含在JScrollPane中,我编辑了我的问题。JTable包含在JScrollPane中,我编辑了我的问题。