java - 如何使 JTable 像 windows 一样调整大小?
问题描述
我正在用swing和jfreechart在eclipse中制作一个应用程序,我遇到了以下问题:
正如您在屏幕截图中看到的,我有一个包含一些组件的框架。问题在于 JTable,无论我是否调整窗口大小,它总是具有相同的大小。我希望表格以与其他组件相同的方式调整大小,例如右侧的 ChartPanel,但我不知道该怎么做。contentPane 有一个带有三个面板的 BorderLayout:
- JTable (WEST) 的滚动窗格
- 图表面板(中心)
- 按钮面板(南)
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 的工作方式是:
- WEST/EAST 中的组件按组件的首选宽度调整大小。
- CENTER 中的组件获得剩余宽度。
因此,在您的情况下,滚动窗格是固定宽度,图表面板的宽度会有所不同。
如果您希望滚动窗格和图表面板宽度随着框架大小的变化而变化,您需要使用不同的布局管理器。
在这种情况下,您可以使用带有 a 的面板GridBagLayout
作为滚动面板和图表组件。然后GridBagLayout
将按每个组件的首选大小分配空间。然后,您可以weightx
为每个组件指定约束,以指定随着框架的增加,每个组件的额外空间百分比。
阅读 Swing 教程中有关如何使用 GridBagLayout的部分,以获取有关约束和工作示例的更多信息,以帮助您入门。
推荐阅读
- reactjs - 更改路径更改时按钮的外观
- svelte - Svelte:如何订阅组件范围内的变量
- javascript - 如何使用 jquery 从输入类型文件中获取字节
- asp.net-core - 无法跟踪实体类型“公司”的实例,因为已在跟踪另一个具有键值“{CompanyId: 12}”的实例
- java - 连续计算器
- linux - 是否可以在下一行打印而无需在 Linux 脚本中重新输入 echo?
- javascript - 这两种循环方法有什么区别?
- python - 将矩阵的六个下三角值转换为keras中的对角矩阵
- javascript - net::ERR_ABORTED 404(未找到)Azure 函数
- c# - 在 .NET 中使用 Google.Apis.Translate.v3beta1 翻译 PPT 文件 - 错误 403:“提供的范围未经授权”