2011-08-04 52 views
1

我正在将应用程序从java 1.5迁移到1.6(是的,我知道)。JTable冻结列不滚动(Java 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); 

(表车型为主要和frozenTable总是有相同的行数)

这个工作,因为我们在Java 1.5的希望,即:我们有一个数据表左侧有许多冻结的柱子。垂直滚动窗格同时滚动两个表。

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

有时,当您仅垂直滚动主表滚动时 - 冻结表不会滚动。这些表格未链接。

以前有没有人看过类似的东西?

回答

2

我以前没见过这样的东西,既然它是不可重现的,它将很难调试。我建议把它缩小到尽可能小的一个例子(基本上是一个SCCEE),看看你是否重现了这种行为。如果它仍然存在间歇性,那么它可能与1.6有关,但我怀疑它。如果它不再存在,那么它可能同时发生在后台。

+0

同意 - 这是一个很难的,虽然我们有一些生产用户向我们大喊大叫。在我们移植到1.6后,它肯定出现了,我们第一次看到它的产品版本与之前的1.5版本完全相同,但是重新编译 - 我们确信这一点。实际的代码是相当可怕的早期摇摆代码。如果没有可重复性,真的不可能做得太多,但无所事事不是一种选择。 – ashbyp

+0

我的猜测是在可怕的Swing代码中。也许使用今天的Swing重新编写一些它。 – jzd

+0

@jzd有很多变化,也许当前版本的Java 1.5基于Bug(自定义表),然后+1 – mKorbel

4

间歇问题的性质应该提示一个来验证GUI组件是在event dispatch thread上构建的。迁移到1.6可能已经改变了恰好足以暴露这种异常的时机。

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()); 
+0

感谢代码我将重新排列我们的东西 - 但我认为这可能是一个线程问题,因为每个垃圾建议。问题是在代码中有几百个地方需要验证和检查。线程问题 - arrgh。我希望以前有人见过这种事很简单。 – ashbyp