JTable冻结列不滚动(Java 1.6)

时间:2011-08-04 13:44:49

标签: java swing jtable jscrollpane

我正在将应用程序从java 1.5迁移到1.6(是的,我知道)。

我们有一个带有一些冷冻柱的表。构造如此(粗略)

JScrollPane tablePane = new JScrollPane();
JTable mainTable = new JTable();
JTable frozenTable = new JTable()
JPanel rowHeaderPanel = new JPanel();
rowHeaderPanel.add(frozenTable);

tablePane.setRowHeaderView(rowHeaderPanel);
tablePane.setViewportView(mainTable);

(main和frozenTable的表模型总是具有相同的行数)

这在我们想要的java 1.5下运行,即:我们在左侧有一个包含许多冻结列的数据表。垂直滚动窗格会同时滚动两个表格。

除了转移到java 1.6之外,没有任何代码更改,我们现在有一个间歇性的(在开发环境中)不可重现的错误。

有时,当您仅垂直滚动主表滚动时 - 冻结表根本不滚动。表格显示为未链接。

以前有人见过这样的事吗?

3 个答案:

答案 0 :(得分:4)

问题的间歇性性质应该提示人们验证GUI组件是否在event dispatch thread上构建。转向1.6可能已经改变了时间,足以揭露这种异常现象。

答案 1 :(得分:2)

之前我没有见过这样的东西,因为它不可复制,所以很难调试。我建议尽量减少一个例子(基本上是一个SCCEE)并看看你是否重现了这个行为。如果它仍然存在间歇性,则可能与1.6有关,但我对此表示怀疑。如果它不再存在,那么它可能是同时在后台发生的其他事情。

答案 2 :(得分:2)

我同意,这是一个棘手的问题。但我们这样做的方式略有不同,它目前在Java 6下生产。因此,它可能有助于解决IMO问题。我试图使用与初始代码中相同的变量名称。这是我们使用的代码:

JViewport viewport = new JViewport();
viewport.setView(frozenTable);
viewport.setPreferredSize(frozenTable.getPreferredSize());
tablePane.setRowHeaderView(viewport);
tablePane.setCorner(JScrollPane.UPPER_LEFT_CORNER,frozenTable.getTableHeader());