我遇到了一個前面已經討論過的問題:獲取包含JTable
的JScrollPane
,以按我的意願顯示水平滾動條。 HERE是我試過的帖子,但由於某種原因,它似乎不適用於我的情況(我認爲這是因爲我已將其中一列設置爲固定寬度)基於一列寬度的JTable水平滾動條
這是一個SSCCE:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class TableScrollTest extends JFrame
{
public TableScrollTest() {
DefaultTableModel model = new DefaultTableModel(new Object[]{"key", "value"},0);
model.addRow(new Object[]{"short", "blah"});
model.addRow(new Object[]{"long", "blah blah blah blah blah blah blah"});
JTable table = new JTable(model) {
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
};
table.getColumn("key").setPreferredWidth(60);
table.getColumn("key").setMinWidth(60);
table.getColumn("key").setMaxWidth(60);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
}
public static void main(String[] args) {
TableScrollTest frame = new TableScrollTest();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setSize(200, 200);
frame.setResizable(false);
frame.setVisible(true);
}
}
總之,我有兩列的表,用於顯示鍵/值對。保持所述表中的容器是固定寬度的,並且該表的第一列也是固定的寬度(因爲我知道如何長的所有鍵名將是)第二列將包含不同字符串長度的值水平滾動條應該只出現在存在的值太長而不適合列分配的寬度時
由於上述第二值具有這樣的長的長度,滾動條應該是可見的。然而,事實並非如此,而且我所嘗試過的所有方法都只能成功地使其始終可見,這不是我想要的......我只希望它在「長」值存在的情況下可見。看起來好像getScrollableTracksViewportWidth()
方法在表構造函數中被覆蓋,檢查表的首選寬度是什麼......所以我需要引導表根據第二列的內容來選擇更大的寬度......但是我很難過。
任何想法?
你直接的問題是,因爲你覆蓋'getScrollableTracksViewportWidth'這意味着該表格永遠不會比滾動窗格更寬... – MadProgrammer 2013-02-22 01:07:55
@MadProgrammer你確定嗎?我鏈接的示例中已覆蓋該方法,並且在該示例中,表的確會比滾動窗格更寬。 – The111 2013-02-22 01:11:36
但是表的preferredWidth是基於'TableColumn'的寬度,它沒有考慮到內容的寬度,這意味着除非你改變第二列的寬度,就像改變第一列的寬度一樣,將始終返回「true」。我刪除了'getScrollableTracksViewportWidth'方法並手動調整了列的大小,並能夠顯示水平滾動條。 – MadProgrammer 2013-02-22 01:14:09