我应该为这个框架使用什么类型的布局管理器?

What type of layout manager should I use for this frame?

我想使用布局管理器在图像中构建相同的框架

我已经做了:

我不使用可视化 GUI 生成器。我认为您可以使用 GroupLayout 或 GridBagLayout 进行灵活的设计。您也可以使用像 Adob​​e XD 这样的设计工具,并将其转换为 Java。那会更容易。

看看;

https://docs.oracle.com/javase/tutorial/uiswing/layout/group.html https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

这是我对您的屏幕截图的实现。

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

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class SmplForm implements Runnable {

    @Override // java.lang.Runnable
    public void run() {
        createAndDisplayGui();
    }

    private void createAndDisplayGui() {
        JFrame frame = new JFrame("Nonce creator");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(createForm(), BorderLayout.CENTER);
        frame.add(createButtonsPanel(), BorderLayout.PAGE_END);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel createButtonsPanel() {
        JPanel buttonsPanel = new JPanel();
        JButton proceedButton = new JButton("Proceed");
        buttonsPanel.add(proceedButton);
        return buttonsPanel;
    }

    private JPanel createForm() {
        JPanel form = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.LINE_START;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets.bottom = 5;
        gbc.insets.left = 5;
        gbc.insets.right = 5;
        gbc.insets.top = 5;

        JLabel transactionLabel = new JLabel("Transaction");
        form.add(transactionLabel, gbc);
        gbc.gridx = 1;
        JTextField transactionTextField = new JTextField(20);
        form.add(transactionTextField, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        JLabel nonceLabel = new JLabel("Nonce");
        form.add(nonceLabel, gbc);
        gbc.gridx = 1;
        JTextField nonceTextField = new JTextField(20);
        form.add(nonceTextField, gbc);
        gbc.gridx = 2;
        JCheckBox autoCheckBox = new JCheckBox("Auto");
        form.add(autoCheckBox, gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        JLabel hashLabel = new JLabel("Hash");
        form.add(hashLabel, gbc);
        gbc.gridx = 1;
        JTextField hashTextField = new JTextField(20);
        hashTextField.setText("8350e5a3e24c153df2275c9f80692773");
        hashTextField.setEnabled(false);
        form.add(hashTextField, gbc);

        return form;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new SmplForm());
    }
}

这个 GUI 有三个细微的调整,前两个在 Abra 的示例中看到:

  1. 按钮居中对齐。
  2. 复选框的标签位于选中的右侧。
  3. 标签右对齐。

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

public class NonceCreator {

    private JComponent ui = null;

    NonceCreator() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel(new GridBagLayout());
        ui.setBorder(new EmptyBorder(20,30,20,30));

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5,5,5,5);

        // add the labels
        gbc.anchor = GridBagConstraints.EAST;
        ui.add(new JLabel("Transaction"), gbc);
        gbc.gridy = 1; 
        ui.add(new JLabel("Nonce"), gbc);
        gbc.gridy = 2; 
        ui.add(new JLabel("Hash"), gbc);

        gbc.anchor = GridBagConstraints.WEST;

        // add the text fields
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        ui.add(new JTextField(30), gbc);
        gbc.gridy = 2;
        JTextField hashField = new JTextField(
                "8350e5a3e24c153df2275c9f80692773", 30);
        hashField.setEditable(false);
        ui.add(hashField, gbc);
        gbc.gridy = 1;
        gbc.gridwidth = 1;
        ui.add(new JTextField(20), gbc);

        // add the check box
        gbc.gridx = 2;
        ui.add(new JCheckBox("Auto"), gbc);

        // add the button
        gbc.gridx = 0;
        gbc.gridy = 3;
        gbc.gridwidth = 3;
        gbc.anchor = GridBagConstraints.CENTER;
        ui.add(new JButton("Proceed"), gbc);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                NonceCreator o = new NonceCreator();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}