Какой тип диспетчера я должен использовать для этого кадра? - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу построить этот же кадр в образе с помощью Layout Manager

Что я уже сделал:

  • Использовал BorderLayout, чтобы добавить все три JLabel до BorderLayout.WEST(Used GridLayout(3,1).
  • Используется BorderLayout для добавления всех трех JTextField к BorderLayout.CENTER(used GridLayout(3,1).
  • Я строю этот фрейм, добавляя компоненты вручную, используя метод setBounds .

JFrame-Image

Ответы [ 3 ]

2 голосов
/ 11 апреля 2020

Вот моя реализация вашего снимка экрана.

enter image description here

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());
    }
}
1 голос
/ 11 апреля 2020

Это GUI имеет три небольших изменения, первые два, как видно на примере Абры:

  1. Кнопка выровнена по центру.
  2. Метка для флажка находится справа от чека.
  3. Ярлыки выровнены по правому краю.

enter image description here

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);
    }
}
0 голосов
/ 11 апреля 2020

Я не использую визуальный GUI Строитель. Я думаю, что вы можете использовать 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

...