簡體   English   中英

如何在可調整大小的JTable的單個列中水平滾動?

[英]How to scroll horizontally within a single column of a resizeable JTable?

我正在創建一個對話框,以選擇多個文件路徑。 我的對話框包含兩個面板。 一個用於按鈕,例如“添加”和“刪除”,另一個用於包含包裹在scrollPane中的JTable的面板。 該表只有一列。 該表格的單元格不可直接編輯。 當用戶使用JFileChooser選擇文件時,該文件的完整路徑將添加到表中。 盡管對話框的大小是可調整的,但是在文件路徑長於用戶屏幕寬度的情況下,我仍然需要水平滾動行為。

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

滾動多列還是單列都無所謂:基本問題是使水平scrollBar以:-)開頭

有兩個需要調整的螺釘:-通過設置表的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項目的一部分)支持附加的大小調整模式,只要表格的prefWidts小於父級寬度,它就會填充可用的水平空間,並在需要時顯示水平的scrollBar

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

我選擇kleopatra的答案是正確的,因為它解決了我關於表操作的特定問題。 我添加此答案是因為我最終以不同的方式解決了我的根本問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM