我正在创建一个对话框,用于选择多个文件路径。我的对话框由两个面板组成。一个用于按钮,例如“添加”和“删除”,第二个面板包含一个包裹在scrollPane中的JTable。该表只有一列。表格的单元格不能直接编辑。当用户使用JFileChooser选择文件时,该文件的完整路径将添加到表中。虽然我的对话框可以调整大小,但是如果文件路径长于用户屏幕的宽度,我仍然需要水平滚动行为。
我研究过可调整大小的表和水平滚动条的组合。这是类似的,但不是我的问题。典型的滚动行为是滚动列,而不是列的内容。我需要单列的内容来水平滚动。
答案 0 :(得分:4)
无论是滚动多个列还是仅滚动一列都无关紧要:基本问题是让水平scrollBar以: - 开始
有两个螺丝可以调整: - 通过设置表的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 project的一部分),支持一个附加大小调整模式,只要表格的prefWidts小于父级宽度就填充可用的水平空间,并在需要时显示水平scrollBar
table.setHorizontalScrollEnabled(true);
// on receiving a TableModelEvent which might increase the column width
// tell the table to re-evaluate
table.packColumn(0);
答案 1 :(得分:1)
我选择了kleopatra的答案是正确的,因为它解决了我关于表操作的具体问题。我正在添加这个答案,因为我最终以不同的方式解决了我的根问题。
我选择使用JList来表示我的文件路径而不是单个列表。我想要使用JTable的唯一真正原因是因为表格所具有的排列行的外观,以及我对JList的不熟悉。我发现了如何通过扩展DefaultListCellRenderer来编辑JList的外观。因为我现在知道编辑外观,JList的自然调整大小和滚动行为使其更符合我的需求。