如何使JTable像Windows一样调整大小?

问题描述 投票:-1回答:1

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

Screenshot

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

  • JTable(WEST)的scrollPane
  • ChartPanel(中心)
  • 按钮面板(南)

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;
}
java swing jtable jfreechart windowbuilder
1个回答
1
投票

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

那么,BorderLayout的工作方式是:

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

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

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

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

阅读How to Use GridBagLayout上Swing教程中的部分,了解有关约束和工作示例的更多信息,以帮助您入门。

© www.soinside.com 2019 - 2024. All rights reserved.