【问题标题】:JScrollPane prevents components shrinking below their preferred sizeJScrollPane 防止组件缩小到其首选大小以下
【发布时间】:2017-03-31 19:06:30
【问题描述】:

我正在使用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();
    }
}

【问题讨论】:

    标签: java swing jscrollpane miglayout


    【解决方案1】:

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

    如果你想改变行为,那么你可以尝试在你的面板上实现Scrollable 接口。您也许可以覆盖getScrollableTracksViewportWidth() 方法以返回true。现在您的面板应该随着滚动窗格的视口调整大小而调整大小。但是,如果您将视口设置得太小,则使用这种方法将不会获得滚动条。

    如果你想在上述情况下滚动条,那么你可能还需要重写getPreferredSize()方法,以在preferredSize大于视口大小时返回最小大小。

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

    【讨论】:

    • 感谢您的回答。我会仔细看看的。但是,我确实改变了我的方法,因为我意识到我的 JButton 不需要在 JScrollPane 中,所以我只是将它停靠在 JFrame 的南部
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 2023-01-14
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多