我正在尝试使用SpringLayout实现一个非常简单的UI(部分是因为,与我在网上找到的大多数教程作者不同,我与其他布局管理器相比,很像编码界面,部分是因为我想学习如何用它)。 UI基本上如下所示:



一切都很好。如果增加窗口大小,UI会调整我想要的方式(保持欢迎文本居中并扩展文本区域以填充所有新的可用空间)。但是,在某个点以下(更具体地讲,当窗口对于欢迎文本而言变得太窄时):



我希望窗口不允许进一步缩小,因此,如果用户尝试将窗口缩小到小于足以容纳组件的大小,它将停止。如何使用SpringLayout布局管理器完成此操作?

我知道我可以通过处理一些resize-event并检查是否达到最小大小,然后将大小设置为最小大小来做到这一点。但这需要我a)知道或知道如何计算窗口的最小大小,甚至在它渲染之前,b)编写一堆事件处理代码只是为了正确地进行一些UI渲染,并且c)编写一个一堆代码,我希望一个好的布局管理器可以解决;)

最佳答案

您可以为MinimumSize覆盖TopLevelContainer
您已将JTextArea放入JScrollPane
最简单的方法是通过将GUI拆分为各个部分(使用相同或不同的LayoutManagers分隔NestedLayout)来混合JPanels(称为LayoutManager),而不是实现某些最复杂的LayoutManagerGridBagLayout或)整个SpringLayout
一些Container漂亮忽略LayoutManagers
setXxxSize不是我的Java




import java.awt.*;
import javax.swing.*;

public class MinSizeForContainer {

    private JFrame frame = new JFrame("some frame title");

    public MinSizeForContainer() {
        JTextArea textArea = new JTextArea(15, 30);
        JScrollPane scrollPane = new JScrollPane(textArea);

        CustomJPanel fatherPanel = new CustomJPanel();
        fatherPanel.setLayout(new SpringLayout());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(fatherPanel, BorderLayout.CENTER);
        frame.setLocation(20, 20);
        frame.setMinimumSize(fatherPanel.getMinimumSize());
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MinSizeForContainer Mpgp = new MinSizeForContainer();
            }
        });
    }
}

class CustomJPanel extends JPanel {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(400, 400);
    }
}

关于java - 确保SpringLayout不会缩小到一定尺寸以下,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8719319/

10-10 21:20