当我在jscrollpane上添加jtable时,水平滚动条不起作用

时间:2015-11-30 08:44:11

标签: java swing jtable jscrollpane

我在JScrollPane上有一个JTable。我希望那张桌子占据整个卷轴。所以我添加了这个:table.setAutoResizeMode(JTable.AUTO_RESIZE_All_Columns);当只有几列时它很好用。但是当它有很多列时,它看起来像 that:

正如您所看到的那样,列太窄了。我尝试为所有列添加此代码:table.getColumnModel().getColumn(1).setMinWidth(75);它有效。我将此代码添加到JScrollPane:setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);但是水平滚动条 doesn't work:

你可以看到它,但它不起作用。我知道我可以使用此代码解决所有问题:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)

但在这种情况下,我的桌子并没有占据整个卷轴。所以,我希望当只有几列时,列扩展了滚动的整个宽度,并且我希望当有很多列时,列不会缩小到小于某个值。我想要一个水平滚动条。有可能吗?

抱歉,这是一个愚蠢的问题。我可以用这段代码做我想做的所有事情:

if (getColumnModel().getColumnCount() > 13)
    setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
else
    setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

但是,如果有人推出更优雅的解决方案请表现出来。这对我很有帮助。

1 个答案:

答案 0 :(得分:2)

重复。
你可以find here 2个优雅的解决方案 其中之一是:

jTable.getParent().addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(final ComponentEvent e) {
        if (jTable.getPrefer1sredSize().width < jTable.getParent().getWidth()) {
            jTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        } else {
            jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        }
    }
});