2011-08-04 86 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