Java 如何使JTable像windows那样调整大小?

Java 如何使JTable像windows那样调整大小?,java,swing,jtable,jfreechart,windowbuilder,Java,Swing,Jtable,Jfreechart,Windowbuilder,我正在使用swing和jfreechart在eclipse中制作一个应用程序,我有以下问题: 正如你在截图中所看到的,我有一个带有几个组件的框架。问题在于JTable,无论我是否调整窗口大小,它总是具有相同的大小。我希望表格能够像其他组件一样调整大小,比如右边的ChartPanel,但我不知道怎么做。contentPane有一个带有三个面板的边框布局: JTable的滚动窗格(西) 图表面板(中间) 按钮面板(南) JTable创建的代码如下: private JTable getTask

我正在使用swing和jfreechart在eclipse中制作一个应用程序,我有以下问题:

正如你在截图中所看到的,我有一个带有几个组件的框架。问题在于JTable,无论我是否调整窗口大小,它总是具有相同的大小。我希望表格能够像其他组件一样调整大小,比如右边的ChartPanel,但我不知道怎么做。contentPane有一个带有三个面板的边框布局:

  • JTable的滚动窗格(西)
  • 图表面板(中间)
  • 按钮面板(南)
JTable创建的代码如下:

private JTable getTasksTable() {
    if (tasksTable == null) {
        tasksTable = new JTable(new DefaultTableModel(new Object[] { "ID", "Duration", "Due-Date" }, 0) {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }

        });

        DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
        centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
        for (int i = 0; i < tasksTable.getColumnModel().getColumnCount(); i++) {
            tasksTable.getColumnModel().getColumn(i).setCellRenderer(centerRenderer);
        }

        tasksTable.getTableHeader().setDefaultRenderer(centerRenderer);
        tasksTable.getTableHeader().setBorder(new LineBorder(new Color(0, 0, 0)));

        tasksTable.setBorder(new LineBorder(new Color(0, 0, 0)));
        tasksTable.setFillsViewportHeight(true);
    }
    return tasksTable;
}
private JTable getTasksTable(){
if(tasksTable==null){
tasksTable=新的JTable(新的DefaultTableModel(新对象[]{“ID”、“持续时间”、“到期日”},0){
私有静态最终长serialVersionUID=1L;
@凌驾
公共布尔值可编辑(int行,int列){
返回false;
}
});
DefaultTableCellRenderer centerRenderer=新的DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
对于(int i=0;i
JTable的滚动窗格(西)、ChartPanel(中)、按钮面板(南)

边界布局的工作方式是:

  • 西/东方向的构件尺寸为构件的首选宽度
  • 位于中心的组件将获得剩余宽度
  • 因此,在您的情况下,滚动窗格的宽度是固定的,图表面板的宽度是不同的

    如果您希望滚动窗格和图表面板的宽度随着帧大小的变化而变化,则需要使用不同的布局管理器

    在这种情况下,滚动窗格和图表组件可以使用带有
    GridBagLayout
    的面板。然后,
    GridBagLayout
    将按照每个组件的首选大小分配空间。然后,可以为每个组件指定
    weightx
    约束,以指定随着帧的增加,每个组件的额外空间百分比


    阅读上Swing教程的部分,了解更多关于约束条件和工作示例的信息,以帮助您入门。

    尝试使用
    GridLayout
    BoxLayout
    将表格和图表放在
    CENTER
    中。我已经尝试了这两种方法,它们的工作效果比以前更好,但问题是表格无法正常工作调整大小。此外,当我最大化窗口时,表格面板中有一个空白,我希望表格适合整个面板。您可以在层次结构中有一个嵌套的
    JPanel
    ,其默认值为
    FlowLayout
    ;您的片段显示表,但不显示封闭布局;请你的问题包括一个显示你修改过的方法。我唯一的流程布局是在面板上的按钮。没有了。JTable在一个JScrollPane中,我不能更改它的布局。“我不能更改它的布局。”好吧,不管怎样。你可以发布一个MCVE。那样做。