簡體   English   中英

我應該為這個框架使用什么類型的布局管理器?

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

我想用布局管理器在圖像中構建相同的框架

我已經做了什么:

  • 使用BorderLayout將所有三個JLabel添加到BorderLayout.WEST(Used GridLayout(3,1)
  • 使用BorderLayout將所有三個JTextField添加到BorderLayout.CENTER(used GridLayout(3,1)
  • 我通過使用setBounds方法手動添加組件來構建這個框架。

JFrame-圖像

這是我對您的屏幕截圖的實現。

在此處輸入圖像描述

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. 復選框的 label 位於復選框的右側。
  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);
    }
}

我不使用可視 GUI Builder。 我認為您可以使用 GroupLayout 或 GridBagLayout 進行靈活的設計。 您也可以使用 Adobe XD 等設計工具,並將其轉換為 Java。 那會更容易。

看着;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM