使用 Java 布局管理器的目的是什么?

2024-03-16

似乎每当我尝试创建一个程序时,我总是会使用setLayout(null);在 Java 中使用命令,因为我喜欢绝对定位我要放入 Swing 组件上的任何内容。从我读到的内容来看,每个人都在说使用布局管理器来简化编码过程,但它是如何简化的呢?平台系统之间绝对定位会出现什么问题?


当您使用layout https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html,调用pack() https://docs.oracle.com/javase/8/docs/api/java/awt/Window.html#pack--“造成这个Window调整大小以适合其子组件的首选大小和布局。”如果不这样做,您必须尝试自己计算边界。如果(当)您弄错了,如下面有点人为的示例所示,用户会责怪你——而且不是没有道理的。可以看到一个关于不可调整大小的容器的相关示例here https://stackoverflow.com/a/12532237/230513.

import java.awt.EventQueue;
import java.awt.FontMetrics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

/**
 * @see https://stackoverflow.com/a/37801762/230513
 * @see https://stackoverflow.com/a/12532237/230513
 */
public class Evil {

    private static final String S = "Tomorrow's winning lottery numbers: 42, ";
    private final JLabel label = new JLabel(S + "3, 1, 4, 1, 5, 9");

    private void display() {
        JFrame f = new JFrame("Evil");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(null);
        FontMetrics fm = label.getFontMetrics(label.getFont());
        int w = SwingUtilities.computeStringWidth(fm, S) + 8;
        int h = fm.getHeight();
        label.setBounds(0, 0, w, h);
        f.add(label);
        f.setSize(w, h * 3);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

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

            @Override
            public void run() {
                new Evil().display();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 布局管理器的目的是什么? 的相关文章

随机推荐