我正在使用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;
}
JTable(WEST)的scrollPane,ChartPanel(CENTER),按钮面板(SOUTH)
那么,BorderLayout的工作方式是:
因此,在您的情况下,滚动窗格是固定宽度,图表面板的宽度会有所不同。
如果您希望滚动窗格和图表面板宽度随帧大小的变化而改变,则需要使用不同的布局管理器。
在这种情况下,您可以使用带有GridBagLayout
的面板作为滚动窗格和图表组件。然后GridBagLayout
将以每个组件的首选大小分配空间。然后,您可以为每个组件指定weightx
约束,以指定随着框架的增加,每个组件的额外空间百分比。
阅读How to Use GridBagLayout上Swing教程中的部分,了解有关约束和工作示例的更多信息,以帮助您入门。