JScrollPane可以防止组件缩小到其首选大小以下

时间:2016-11-17 09:47:49

标签: java swing jscrollpane miglayout

我正在使用Miglayout为我的程序定义布局。问题是JScrollPane阻止JButton缩小到其首选大小以下。 JButton的最小宽度,首选宽度和最大宽度设置如下"w 300:600:900" //min:pref:max

解决此问题的最佳方法是什么?

SSSCE

import java.awt.*;
import javax.swing.*;
import net.miginfocom.swing.MigLayout;

public class ButLay extends JFrame {

    private ButLay()  {
        super("Button Layout");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new MigLayout("", "grow", "grow"));
        createPanel();
        setSize(800, 200);
        setVisible(true);
    }

    JPanel panel = new JPanel(new MigLayout("", "grow", "grow"));
    JScrollPane scroll;
    JButton button = new JButton("Button");

    private void createPanel() {
        panel.add(button, "gapleft 100, align right, w 300:600:900, south");
        scroll = new JScrollPane(panel);
        getContentPane().add(scroll, "grow");
    }

    public static void main(String[] args) {
        new ButLay();
    }
}

1 个答案:

答案 0 :(得分:3)

JScrollPane的默认行为是以滚动窗格中的首选大小显示该组件,以便滚动条可以根据需要显示。

如果您想更改行为,则可以尝试在面板上实施Scrollable界面。您可以覆盖getScrollableTracksViewportWidth()方法以返回true。现在,当滚动窗格的视口调整大小时,您的面板应调整大小。但是,如果您使视口太小,使用此方法您将无法获得滚动条。

如果您希望滚动条处于上述情况,那么当preferredSize大于视口大小时,您可能还需要覆盖getPreferredSize()方法以返回最小大小。

您还可以查看为您实现Scrollable接口的Scrollable Panel,并允许您使用一些便捷方法自定义行为。