Java,将布局设置为null

Lez*_*cal 1 java swing layout-manager

我一直在使用null布局,我很多人会说它不应该这样做.有没有更好的办法?

一些代码作为示例:

import javax.swing.*;

public class Main{
public static void main(String args[]){

    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    JButton button = new JButton("Click");

    //JFrame, frame
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setSize(500, 500);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    //JPanel, panel
    panel.setLayout(null); //<<---- Is this correct?
    frame.add(panel);

    //JButton, button
    button.setBounds(25, 25, 100, 60); //<<---- Is this correct?
    panel.add(button);

   }
}
Run Code Online (Sandbox Code Playgroud)

Mad*_*mer 7

有没有更好的办法?

布局管理器,布局管理器,布局管理器.如果默认提供的布局管理器没有按照您的意愿执行,可以使用布局管理器的组合,也可以尝试一些免费的布局管理器,例如MigLayout(并根据需要与其他布局管理器结合使用)

用你的代码......

没有布局管理器

用一个 GridBagLayout

使用布局管理器

按钮略大,因为它考虑了按钮的实际要求(文本和字体大小),但总是会在宽度上增加100个像素,在高度上增加60个像素.

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {

    public static void main(String args[]) {

        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        JButton button = new JButton("Click");

        //JFrame, frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        //JPanel, panel
        panel.setLayout(new GridBagLayout());
        frame.add(panel);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.ipadx = 100;
        gbc.ipady = 60;
        gbc.insets = new Insets(25, 25, 0, 0);
        gbc.weightx = 1;
        gbc.weighty = 1;
        gbc.anchor = GridBagConstraints.NORTHWEST;

        panel.add(button, gbc);

    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我所做的只是添加,button.setFont(button.getFont().deriveFont(64f));我们最终会...

你的代码在左边,我的代码在右边......

哇空布局

如果你认为这过于戏剧性,那么不同的操作系统会给你带来更糟糕的事情