java - 无法阻止面板变得太小

标签 java swing resize jlabel gridbaglayout

我有一个使用 GridBagLayout 格式化的面板。即使我使用 setMinimumSize 设置大小,它仍然太小。当您缩小窗口(仅使用鼠标拖动)时,它会超出标签的大小,以便标签显示为首先...。然而,只有最左边的标签会像这样缩小。

但是,从运行下面的代码可以看出,面板仍然有可能超出窗口边缘。我可以接受这种行为,我只是不希望标签的文本被搞乱。澄清一下:我希望两个标签都没有收缩,我希望面板从周围面板的边缘滑落。

这是我能想到的最简单的示例,它以易于查看的方式重现了此行为:

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class TestMain {
    private JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestMain window = new TestMain();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public TestMain() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel outer = new JPanel();
        outer.setLayout(new BoxLayout(outer, BoxLayout.Y_AXIS));
        outer.setBorder(new EmptyBorder(30,30,30,30));
        outer.setBackground(Color.DARK_GRAY);

        JPanel inner = new JPanel();
        inner.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        JLabel labelOne = new JLabel();
        labelOne.setText("first label");
        c.anchor = GridBagConstraints.LINE_END;
        inner.add(labelOne, c);

        JLabel labelTwo = new JLabel();
        labelTwo.setText("second label");
        c.anchor = GridBagConstraints.LINE_START;
        c.gridx = 2;
        inner.add(labelTwo, c);

        c.gridx = 1;
        c.weighty = 1.0;
        inner.add(Box.createHorizontalStrut(100), c);

        outer.add(inner);
        frame.add(outer);
    }
}

运行此代码,然后水平调整窗口大小。最终窗口的大小被调整得足够小,标签变得困惑。

最佳答案

我不知道为什么 GridBagLayout 会这样做。但如果你给每个标签赋予weightx=1.0,它们都会收缩。

简单的解决方案是使用 FlowLayout。组件始终以其首选尺寸显示。

关于java - 无法阻止面板变得太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934877/

相关文章:

ios - Iphone, iPad 屏幕尺寸以编程方式纵向和横向模式

大数据的java bpm和子工作流的多实例化

java - 半透明的 jPanels

java - 如何调整窗口大小以使所有组件可见

C# WPF 调整大小问题

c - 释放已用数据的内存会导致段错误

java - 如何在batchUpdate期间覆盖Spring JDBCTemplate的事务超时值

java - 从字符串中删除特殊字符

java.lang.NoSuchMethodError : com. google.common.collect.ImmutableSortedSet.toImmutableSortedSet(Ljava/util/Comparator;)Ljava/util/stream/Collector;

java - 程序 'java.ori' 收到 X Window 系统错误