我使用以下代码在 JScrollPane
内创建 JTable
以显示列标题
JTable won't show column headers
String[] columnNames = {"header1", "header2", "header2", "header3"};
Object[][] data = new Object[num][4];
//feed values into data using for
JTable chart = new JTable(data, columnNames);
chart.setShowVerticalLines(false);
chart.setEnabled(false);
chart.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane sp = new JScrollPane(chart);
sp.setPreferredSize(new Dimension(width, chart.getHeight() + 5));
panel.add(sp);
问题是我需要计算 JScrollPane
的高度,以便整个 JTable
可见并且 JScrollBar
s 不会出现。我怎样才能做到这一点?
num
从 2 更改为 4,如果是 4,则会出现滚动条。 宽度
是固定的。
最佳答案
基本方法是
- JTable 是一个 Scrollable,不幸的是,它在计算 prefScrollable 方面做得不太好,所以你必须自己做
- 要么使用 LayoutManager 来布局所有内容(例如 FlowLayout),要么在 JTable 中实现 max(如果您使用像 BoxLayout 这样的调整大小但尊重 max 的管理器)
- JScrollPane 是一个validationRoot,因此重新验证必须发生在scrollPane 的父级上
类似于:
final JTable table = new JTable(10, 5) {
@Override
public Dimension getPreferredScrollableViewportSize() {
Dimension dim = super.getPreferredScrollableViewportSize();
// here we return the pref height
dim.height = getPreferredSize().height;
return dim;
}
};
final JComponent content = new JPanel();
content.add(new JScrollPane(table));
Action add = new AbstractAction("add row") {
@Override
public void actionPerformed(ActionEvent e) {
((DefaultTableModel) table.getModel()).addRow(new Object[]{});
content.revalidate();
}
};
关于java - JScrollPane 内的 JTable : best height to disable scrollbars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13971089/