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

使用Java布局管理器的目的是什么?,java,swing,layout,Java,Swing,Layout,似乎每当我试图创建一个程序时,我总是使用setLayout(null)命令,因为我喜欢绝对定位我要放在swing组件上的任何东西。从我读到的内容来看,每个人都在说使用布局管理器来简化编码过程,但它如何简化它呢?平台系统之间的绝对定位会出现什么问题?简单地说,由于桌面大小或用户拖动窗口边框,每当窗口大小发生变化时,它们都会执行此操作。如果你绝对地定位事物,那么每当大小改变时,它们就会乱成一团。简单地说,当你的窗口大小改变时,它们就会工作,因为桌面大小或用户拖动窗口边框。如果你绝对地定位事物,那么每

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

简单地说,由于桌面大小或用户拖动窗口边框,每当窗口大小发生变化时,它们都会执行此操作。如果你绝对地定位事物,那么每当大小改变时,它们就会乱成一团。

简单地说,当你的窗口大小改变时,它们就会工作,因为桌面大小或用户拖动窗口边框。如果你绝对地定位事物,那么每当大小发生变化时,它们都会变得一团糟。

当你使用时,调用“使此
窗口的大小符合其子组件的首选大小和布局”。如果你不这样做,你必须试着自己计算边界。如果(当)你弄错了,如下面有点做作的例子所示,用户会责怪你,而且不是没有理由的。下面是一个关于不可调整大小的容器的相关示例

使用时,调用“使此
窗口的大小符合其子组件的首选大小和布局”。如果不使用,则必须自己尝试计算边界。如果(当)你弄错了,如下面有点做作的例子所示,用户会责怪你,而且不是没有理由的。下面是一个关于不可调整大小的容器的相关示例


相关:布局管理vs布局手动。即使不调整窗口大小,当你想快速拥有一些看起来不错的东西时,我想这也要简单得多。回到过去,Sun Microsystems的好人希望Java/Swing能够成为网页自动化的语言。那是在Javascript吃了午餐并盗用了它的名字之前。所以,无论如何,Swing是用来创建小程序的,小程序被期望在“容器”中运行,而容器的大小是他们无法控制的。布局管理器是使所有工作正常进行的关键。“我喜欢绝对定位我在swing组件上放置的任何东西。”我向您挑战,让您使用
null
布局进行创建。两个“必备”功能可调整大小,以及。。2) 可以有任何与版面相关的:版面管理vs版面手动。即使不调整窗口大小,当你想快速拥有一些看起来不错的东西时,我想这也要简单得多。回到过去,Sun Microsystems的好人希望Java/Swing能够成为网页自动化的语言。那是在Javascript吃了午餐并盗用了它的名字之前。所以,无论如何,Swing是用来创建小程序的,小程序被期望在“容器”中运行,而容器的大小是他们无法控制的。布局管理器是使所有工作正常进行的关键。“我喜欢绝对定位我在swing组件上放置的任何东西。”我向您挑战,让您使用
null
布局进行创建。两个“必备”功能可调整大小,以及。。2) 我可以吃任何一种。
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();
            }
        });
    }
}