我遇到了一个前面已经讨论过的问题:获取包含JTable
的JScrollPane
,以按我的意愿显示水平滚动条。 HERE是我试过的帖子,但由于某种原因,它似乎不适用于我的情况(我认为这是因为我已将其中一列设置为固定宽度)基于一列宽度的JTable水平滚动条
这是一个SSCCE:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class TableScrollTest extends JFrame
{
public TableScrollTest() {
DefaultTableModel model = new DefaultTableModel(new Object[]{"key", "value"},0);
model.addRow(new Object[]{"short", "blah"});
model.addRow(new Object[]{"long", "blah blah blah blah blah blah blah"});
JTable table = new JTable(model) {
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
};
table.getColumn("key").setPreferredWidth(60);
table.getColumn("key").setMinWidth(60);
table.getColumn("key").setMaxWidth(60);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
}
public static void main(String[] args) {
TableScrollTest frame = new TableScrollTest();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setSize(200, 200);
frame.setResizable(false);
frame.setVisible(true);
}
}
总之,我有两列的表,用于显示键/值对。保持所述表中的容器是固定宽度的,并且该表的第一列也是固定的宽度(因为我知道如何长的所有键名将是)第二列将包含不同字符串长度的值水平滚动条应该只出现在存在的值太长而不适合列分配的宽度时
由于上述第二值具有这样的长的长度,滚动条应该是可见的。然而,事实并非如此,而且我所尝试过的所有方法都只能成功地使其始终可见,这不是我想要的......我只希望它在“长”值存在的情况下可见。看起来好像getScrollableTracksViewportWidth()
方法在表构造函数中被覆盖,检查表的首选宽度是什么......所以我需要引导表根据第二列的内容来选择更大的宽度......但是我很难过。
任何想法?
你直接的问题是,因为你覆盖'getScrollableTracksViewportWidth'这意味着该表格永远不会比滚动窗格更宽... – MadProgrammer 2013-02-22 01:07:55
@MadProgrammer你确定吗?我链接的示例中已覆盖该方法,并且在该示例中,表的确会比滚动窗格更宽。 – The111 2013-02-22 01:11:36
但是表的preferredWidth是基于'TableColumn'的宽度,它没有考虑到内容的宽度,这意味着除非你改变第二列的宽度,就像改变第一列的宽度一样,将始终返回“true”。我删除了'getScrollableTracksViewportWidth'方法并手动调整了列的大小,并能够显示水平滚动条。 – MadProgrammer 2013-02-22 01:14:09