2010-12-20 78 views
1

我想在JTable中創建自定義單元格。我使用自定義渲染器並返回JPanel對象。 它有效,但有一個問題。在程序運行時,JPanel使用paintComponent()方法繪製自己。在每個「嘀嗒」(通常每100ms)面板變得越來越寬(我想要調整它的大小和創建滾動條)我嘗試了幾種放置ScrollPane的方法,但是它們都沒有工作基本上,我想要類似Java中的線程視圖VisualVM。任何想法?JTable單元格中的可滾動JPanel

+1

參見http://stackoverflow.com/questions/4167452 – trashgod 2010-12-20 18:33:13

回答

1

將滾動窗格放在普通表格單元格內是很困難的工作,因爲只有一個組件用於渲染表格中的所有單元格。可能會刪除JTable並將大量組件放在普通的JPanel中佈局

如果你仍然想使用JTable中:?

每滾動窗格中含有特殊的JViewport控制此JViewport的控制其實也都滾動WO rk和JSrollPane本身只使用滾動條進行佈局。由於單個視口用於所有單元格,因此必須存儲此視口滾動位置的某個位置,併爲每個繪畫單元格恢復它(在getCellRenderer方法上)。但是JSrollPane需要繁重的佈局工作,所以這是非常緩慢的解決方案。

可能是最優選的解決方案:覆蓋您JPane單元格渲染器的繪製方法,並且此繪圖方法必須以適當的滾動偏移量創建子圖形(Graphics.create())。滾動偏移量數據必須存儲在某處(例如,在表模型中)。當用戶單擊單元格時,JTable將開始單元格編輯,並安裝單元格編輯器。這必須是特殊的單元格編輯器,包含滾動窗格本身。用戶滾動此控件(無需特殊支持)並完成單元格編輯,您必須將滾動位置保存爲模型(在stopCellEditing()函數中)。然後單元格渲染繪製本身,並在繪製方法獲取內容滾動偏移模型。用戶看到滾動的單元格。您也可以將JScrollBar放入單元格渲染中,這樣用戶可以看到滾動位置(但它需要特殊的支持)。您也可以使用JViewport本身來完成所有的痛苦工作,但控制難以理解。我沒有看到任何麻煩機智在單元格編輯器中使用滾動褲,所以它必須工作。無論如何,這是巨大的工作。

0

因此,您已經設置了自定義表格單元格渲染器,並且我假設此渲染器是JPanel上的JScrollPane視圖。在調用validate()觸發佈局更新之前,您可能需要在面板上調用setPreferredSize(),並在面板上調用setPreferredSize()和/或setSize()(或任何內部元素在滾動窗格中查看)。