我正在将应用程序从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之外,没有任何代码更改,我们现在有一个间歇性的(在开发环境中)不可重现的错误。
有时,当您仅垂直滚动主表滚动时 - 冻结表根本不滚动。表格显示为未链接。
以前有人见过这样的事吗?
答案 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());