2011-06-17 189 views
3

我試圖滾動功能添加到我的JTable中某一列。我實現了一個自定義的TableCellRenderer組件,我可以看到在表內滾動窗格就好了,但我不能滾動它。我也嘗試過實現TableCellEditor,並沒有任何運氣。添加JScrollPane組件向JTable列

public Component getTableCellEditorComponent(JTable arg0, Object arg1, 
     boolean arg2, int arg3, int arg4) { 
    return scrollPane; 
} 

沒有人有任何想法如何使那些包含一個ScrollPane滾動的細胞?

+0

我從來沒有試過一個JScrollPane,但我已經做了與JButton的表格單元格編輯器類似。你的代碼如何處理開始編輯和停止編輯? –

回答

5

用的TableCellRenderer它不能添加任何滾動行爲,因爲它沒有收到任何事件,僅繪製的組件。 這是可能的 - 但是 - 通過使用自定義TableCellEditor的使用getTableCellEditor感來實現:

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
    JTextArea area = new JTextArea(); 
    area.setLineWrap(true); 
    area.setText((String) value); 

    JScrollPane pane = new JScrollPane(area); 

    return pane; 
} 

此外,你必須控制你的CellEditor中的編輯行爲。若要使單元格可編輯和可滾動始終,的isCellEditable應該是這樣的:

public boolean isCellEditable(EventObject anEvent) { 
    return true; 
} 

就個人而言,我覺得這個解決方案要多砍比什麼的,雖然。 另外,這應該只用於測試。在我看來,你確實需要實現更好的編輯行爲。

+0

謝謝,我錯過了isCellEditable方法。奇怪的是,你爲什麼認爲這是一個黑客? – Lithium

+0

嗯,我想「砍」是錯誤的單詞。我只是不喜歡'返回TRUE'聲明,因爲它覆蓋任何東西,不走的EventObject'anEvent'考慮,例如。但是,如果細胞真的應該隨時都可以編輯,這就是要做到這一點的方法。 – vehk

2

渲染只是油漆的細胞。我相信你需要實現一個TableCellEditor來滾動。

2

作爲替代方案,考慮將一個滾動窗格在一個單獨的容器中,並更新它的視圖中選擇監聽器。