2

我正在制作一个对话框以选择多个文件路径。我的对话框由两个面板组成。一个用于“添加”和“删除”等按钮,第二个面板包含一个包裹在滚动窗格中的 JTable。该表只有一列。表格的单元格不可直接编辑。当用户使用 JFileChooser 选择文件时,该文件的完整路径将添加到表中。尽管我的对话框是可调整大小的,但在文件路径长于用户屏幕宽度的情况下,我仍然需要水平滚动行为。

我研究了可调整大小的表格和水平滚动条的组合。那是相似的,但不是我的问题。典型的滚动行为是滚动列,而不是列的内容。我需要单列的内容水平滚动。

4

2 回答 2

4

滚动多列还是仅滚动一列都没有关系:基本问题是让水平滚动条开始:-)

有两个螺丝需要调整: - 通过设置表格的 resizeMode 启用水平滚动:默认是始终使表格的大小适合 scrollPane 的大小,即不滚动 - 调整列宽以适合其内容

在映射成伪代码的核心 JTable 中

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// on receiving a TableModelEvent which might increase the column width
// calculate new width by measuring pref of the renderer
int newWidth = ... 
// set it as pref of the column 
table.getColumnModel().getColumn(0).setPreferredWidth(newWidth);

问题是,如果没有 resizeMode,您始终负责调整列的大小:它的宽度小于 scrollPane,它的尾部有一个空白区域。

JXTable(SwingX 项目的一部分),支持添加大小模式,只要表格的 prefWidts 小于父宽度,就会填充可用的水平空间,并在需要时显示水平滚动条

table.setHorizontalScrollEnabled(true);
// on receiving a TableModelEvent which might increase the column width
// tell the table to re-evaluate 
table.packColumn(0);
于 2012-08-30T06:31:09.483 回答
1

我选择 kleopatra 的答案是正确的,因为它解决了我关于表格操作的具体问题。我添加这个答案是因为我最终以不同的方式解决了我的根本问题。

我选择使用JList来表示我的文件路径而不是单个列表。我想要使​​用 JTable 的唯一真正原因是因为表格的行列的外观,而且因为我不熟悉 JList。我发现了如何通过扩展DefaultListCellRenderer来编辑 JList 的外观。因为我现在知道如何编辑外观,所以 JList 的自然调整大小和滚动行为使它更自然地满足我的需要。

于 2012-09-11T14:35:54.630 回答