首页 > 解决方案 > 如何使 JTable 像 windows 一样调整大小?

问题描述

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

截屏

正如您在屏幕截图中看到的,我有一个包含一些组件的框架。问题在于 JTable,无论我是否调整窗口大小,它总是具有相同的大小。我希望表格以与其他组件相同的方式调整大小,例如右侧的 ChartPanel,但我不知道该怎么做。contentPane 有一个带有三个面板的 BorderLayout:

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;
}

标签: javaswingjtablejfreechartwindowbuilder

解决方案


JTable (WEST) 的 scrollPane、ChartPanel (CENTER)、按钮面板 (SOUTH)

好吧,BorderLayout 的工作方式是:

  1. WEST/EAST 中的组件按组件的首选宽度调整大小。
  2. CENTER 中的组件获得剩余宽度。

因此,在您的情况下,滚动窗格是固定宽度,图表面板的宽度会有所不同。

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

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

阅读 Swing 教程中有关如何使用 GridBagLayout的部分,以获取有关约束和工作示例的更多信息,以帮助您入门。


推荐阅读