【问题标题】:Horizontal scroll bar doesn't work when I add jtable on jscrollpane当我在 jscrollpane 上添加 jtable 时,水平滚动条不起作用
【发布时间】:2015-11-30 18:08:46
【问题描述】:

我在 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);

但是,如果有人知道更优雅的解决方案,请展示它。这对我真的很有帮助。

【问题讨论】:

    标签: java swing jtable jscrollpane


    【解决方案1】:

    重复。
    你可以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);
            }
        }
    });
    

    【讨论】:

    • 非常感谢!真的很棒!但现在我有另一个问题。在我的 JTable 实现中,我重写了 prepareRenderer 方法,因为我想要为内容拉伸列。而且效果很好。但是现在由于以下代码它不起作用: jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);有没有可能解决这个问题?
    • @Александр Елизаров 打开一个新问题并提交prepareRenderer的代码
    • 我已经这样做了。这是我的代码问题:stackoverflow.com/questions/33999145/…
    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2022-01-18
    • 2015-06-19
    • 1970-01-01
    • 2012-09-05
    • 2016-03-17
    • 2011-01-28
    相关资源
    最近更新 更多