仅当 JTable 适合视口时才启用 JTable 的自动调整大小
2022-09-04 02:28:33
我需要在JScrollPane中创建一个JTable,其中包含可调整大小的列(当用户增加列宽时 - 水平滚动条出现)。为此,我使用了.此外,当视区足够宽以包含整个表时 - 列应拉伸以填充视口宽度。为了实现这一点,我有JTable类的覆盖方法,如下所示:table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
getScrollableTracksViewportWidth()
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
这种方法效果很好,除了一件事:当我第一次尝试调整列大小时,它会返回自己的宽度来开始位置。如果我快速调整列的大小并释放鼠标表继续工作良好。那么,这种行为的原因是什么呢?为什么即使返回 false,表也会尝试调整大小?或者,也许,您可以提出更好的解决方案来实现这种调整大小模式?getScrollableTracksViewportWidth()
波纹管是上述问题的一个简单的工作示例:
import javax.swing.*;
public class TestTable {
private static Object[][] data = new Object[][] {
{ "a", "b", "c" },
{ "d", "e", "f" }
};
private static Object[] colNames = new Object[] { "1", "2", "3" };
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JTable table = new JTable(data, colNames) {
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
});
}
}