基于一列宽度的java JTable水平滚动条
我遇到了一个以前在这里讨论过的问题:让一个包含JScrollPane
的JTable
来显示我想要的水平滚动条HERE是我尝试关注的一个帖子,但出于某种原因,它似乎不适合我的情况(我认为这是因为我已经将我的一个专栏设置为固定宽度)
以下是一个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);
}
}
简而言之,我有一个用于显示键/值对的两列表。容纳表的容器是固定宽度的,表的第一列也是固定宽度的(因为我知道所有键名的长度)。第二列将包含不同字符串长度的值。只有当存在的值太长,无法容纳为列分配的宽度时,才会出现水平滚动条
因为上面的第二个值的长度很长,所以滚动条应该是可见的。然而,事实并非如此,我所尝试的一切都成功地让它始终可见,这不是我想要的。。。我只希望它在存在“long”值时可见。似乎在表构造函数中被重写的getScrollableTracksViewportWidth()
方法会检查表的首选宽度。。。所以我需要根据第二列的内容引导表格选择更大的宽度。。。但我被难住了
有什么想法吗
共 (0) 个答案