限制JScrollPane视图宽度

时间:2012-11-13 21:54:24

标签: java swing jscrollpane

如何限制JScrollPanel视图宽度?在任何情况下我都不希望水平滚动发生。我试图提供自己的JViewport,但这没有多大帮助。

private static class WidthRestrictingViewport extends JViewport {
        private Container contents;

        public WidthRestrictingViewport(final Container cnts) {
            contents = cnts;
        }

        @Override
        public Dimension getPreferredSize() {
            if (getParent() instanceof JScrollPane) {
                JScrollPane sp = (JScrollPane) getParent();
                return new Dimension(sp.getWidth(), contents.getHeight());
            }
            return super.getPreferredSize();
        }

        @Override
        public Dimension getMaximumSize() {
            return getPreferredSize();
        }
    }

创建JScrollPane

的代码
Container fpdp = ....

    JScrollPane sp = new JScrollPane();
    sp.setViewport(new WidthRestrictingViewport(fpdp));
    sp.setViewportView(fpdp);
我提供的

contents实例占用了它的最大宽度,但我希望它的宽度不超过JScrollPane宽度,因此水平滚动不会发生。我做错了什么?

1 个答案:

答案 0 :(得分:2)

对不起,我的解释很糟糕。我找到了一种方法。感谢JScrollpane needs to shrink its width

我遇到的另一个问题是ScrollablePanel中的布局管理器错误。那是FlowLayout搞砸了所有事情。我立刻不理解它,并认为问题在于Scrollable接口使用。

所以我刚接过ScrollablePanel并将其布局管理器设置为BorderLayout,现在一切都很好!