【问题标题】:GridbagLayout within ScrollPane Java SwingScrollPane Java Swing 中的 GridbagLayout
【发布时间】:2012-11-20 13:03:11
【问题描述】:

我刚刚在 GridBagLayout 中为拆分窗格制作了一个布局。 工作完美,看起来不错。

然后我只需要垂直添加一个滚动条。因此,我现在已经这样做了。 然而,布局不像以前那样“调整大小”。 它现在延伸到显示的窗格区域。

JSplitPane VPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,(new class1()),new JScrollPane(new class2(),ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));

我需要让它看起来像以前一样。有什么想法吗?

【问题讨论】:

  • 请发SSCCE 我讨厌这样冒险的猜测
  • 嗨 =D 我已经发布了有效地“破坏”我的网格包布局的代码。不确定还要发布什么?
  • @user1203297 :这行的加入究竟带来了什么效果,加上之前的样子,是任何人都无法想象的,也无法凭直觉描绘出来。这就是为什么需要SSCCE

标签: java swing jscrollpane gridbaglayout


【解决方案1】:

您所做的只是“隐藏”水平滚动条。这不会影响管理组件的视口。

尝试将现有布局包装在Scrollable 界面中。如果你不想自己实现一个,你可以使用一个包装容器来代替......

public class ScrollableWrapper extends JPanel implements Scrollable {

    private Component wrapper;

    public ScrollableWrapper(Component wrapper) {
        setLayout(new BorderLayout());
        add(wrapper);
        this.wrapper = wrapper;
    }

    @Override
    public Dimension getPreferredScrollableViewportSize() {
        return wrapper.getPreferredSize();
    }

    @Override
    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 64;
    }

    @Override
    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 64;
    }

    @Override
    public boolean getScrollableTracksViewportWidth() {
        return true;
    }

    @Override
    public boolean getScrollableTracksViewportHeight() {
        return false;
    }

}

然后,我们将其添加到滚动窗格中...

JSplitPane VPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,new class1(),new JScrollPane(new ScrollableWrapper(class2())));

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2011-06-17
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多