JScrollpane需要缩小其宽度

时间:2010-04-26 19:32:57

标签: java swing jscrollpane miglayout

我的JScrollpane内部有JPanel(面板中包含一些JLabel)。

我希望调整滚动窗格的大小以实际更改其大小(可能低于内部组件的首选大小),而不仅仅是视口的大小。

当用户缩小滚动窗格太小时,目标是内部面板优雅地消失(在我的miglayout中使用特定的缩小优先级等)。

1 个答案:

答案 0 :(得分:14)

可能最好的方法是使包含的组件始终与视口的宽度相同。要做到这一点,第一个包含的组件(JViewPort的子组件,传递到JScrollPane构造函数或设置为viewportView)需要实现javax.swing.Scrollable。关键方法是getScrollableTracksViewportWidth,应返回true

这是一个快速而又脏的可滚动JPanel:

public class ScrollablePanel extends JPanel implements Scrollable {
    public Dimension getPreferredScrollableViewportSize() {
        return getPreferredSize();
    }

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
       return 10;
    }

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return ((orientation == SwingConstants.VERTICAL) ? visibleRect.height : visibleRect.width) - 10;
    }

    public boolean getScrollableTracksViewportWidth() {
        return true;
    }

    public boolean getScrollableTracksViewportHeight() {
        return false;
    }
}