2012-08-29 27 views
2

我正在做一個選擇多個文件路徑的對話框。我的對話由兩個面板組成。一個用於「Add」和「Remove」之類的按鈕,另一個用於包含一個包含在scrollPane中的JTable的面板。該表只有一列。表格的單元格不能直接編輯。當用戶使用JFileChooser選擇文件時,該文件的完整路徑將被添加到表中。儘管我的對話框可調整大小,但如果文件路徑長於用戶的屏幕寬度,我仍然需要水平滾動行爲。如何在可調整大小的JTable的單個列中水平滾動?

我研究了可調整大小的表格和水平滾動條的組合。這是相似的,但不是我的問題。典型的滾動行爲是列滾動,而不是列的內容。我需要單列的內容水平滾動。

+0

1)一定要在問題中添加問號。 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

4

不要緊,你是否滾動多或只有一個字段:根本問題是讓水平滾動條來開始:-)

有來調整兩個螺絲: - 使水平滾動條通過設置表格的resizeMode:默認值始終適合表格的大小以適應scrollPane的大小,即不滾動 - 調整列寬以適應其內容的大小

在覈心JTable中映射到類似僞代碼

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
// on receiving a TableModelEvent which might increase the column width 
// calculate new width by measuring pref of the renderer 
int newWidth = ... 
// set it as pref of the column 
table.getColumnModel().getColumn(0).setPreferredWidth(newWidth); 

問題是,如果沒有resizeMode,你總是要負責調整列的大小:它的寬度小於scrollPane,它的尾部有一個空的區域。

JXTable(的SwingX project部分),支持其中只要填充可用水平空間爲表的prefWidts加成上漿模式小於父寬度和示出,如果需要

table.setHorizontalScrollEnabled(true); 
// on receiving a TableModelEvent which might increase the column width 
// tell the table to re-evaluate 
table.packColumn(0); 
+1

總是想知道爲什麼SwingX滾動行爲不是Core JDK的一部分。似乎對於我使用的每個表,我始終以SwingX滾動行爲結束 – Robin

+0

謝謝。我相信packColumn方法是我正在尋找的。 –

1

我選擇克列奧帕特拉的水平滾動條答案是正確的,因爲它解決了我有關表格操作的具體問題。我添加了這個答案,因爲我最終以不同的方式解決了根本問題。

我選擇使用JList來表示我的文件路徑而不是單個列表。我想要使​​用JTable的唯一真正原因是由於表格有行內行,並且因爲我不熟悉JList。我發現瞭如何通過擴展DefaultListCellRenderer來編輯JList的外觀。因爲我現在知道編輯外觀,所以JList的自然調整大小和滾動行爲使其更加符合我的需求。

相關問題