java - FlowLayout 在 GridBagLayout 中不使用多行

标签 java swing

通常,如果需要,FlowLayout 会使用多条线。显然,如果具有 FlowLayout 的组件本身是 GridBagLayout 的一部分,则不会发生这种情况。

考虑这段代码:

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

public class Xyzzy extends JFrame{
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Xyzzy frame = new Xyzzy();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new GridBagLayout());

                JPanel top = new JPanel();
                top.setLayout(new FlowLayout());
                for (int i=1; i<=30; ++i)
                    top.add(new JLabel(String.format("Label #%d",i)));

                GridBagConstraints c = new GridBagConstraints();
                c.weightx = 1.0;
                c.gridwidth = GridBagConstraints.REMAINDER;
                c.anchor = GridBagConstraints.CENTER;

                frame.add(top,c);
                frame.add(new JLabel("Bottom"),c);

                //top.setPreferredSize(new Dimension(500,300));

                frame.setSize(600, 600);
                frame.setVisible(true);
            }
        });
    }
}

此代码旨在多行显示 JLabels“Label #1”、“Label #2”等,但实际上它只使用了一行。

我可以通过在上面的代码中调用 setPreferredSize 之前删除 '//' 来强制它使用多行,但这需要我同时设置宽度和高度,我不知道要设置什么高度使用。 (我不能使用 FontMetrics 来计算高度,因为在我的实际情况下,JLabel 实际上是不同大小的小 JPanel。)

那么有没有办法强制FlowLayout使用多行呢? (或者,有没有一种方法可以在已知组件宽度的情况下计算组件所需的高度?)

最佳答案

尝试添加约束参数:

c.weighty = 1.0;
c.fill = GridBagConstraints.VERTICAL;

它应该允许在垂直方向上使用 FlowLayout 增加面板。

关于java - FlowLayout 在 GridBagLayout 中不使用多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8049561/

相关文章:

java - 从监听器调用所有者类

java - java中对象数组中的下一个元素加1可以吗?

具有负操作数的 Java 按位移位运算符

java - 覆盖由 jackson-datatype-hibernate 生成的 id 名称

java - Java Swing Eclipse - JPanel 和组件自动调整大小

java - 限制 PLAIN_MESSAGE JOptionPane 中输入文本的大小

Java 设计替代 if-else with instanceof

java - 显示 (x,y) 偏移量的 MouseMotionListener

java - JFrame如何检测去图标化是否完成

java - 如何在 JTextField 中设置财务代码文档过滤器