Как мне выровнять каждую метку рядом с ее текстовым полем в Java?

#java #swing #user-interface

#java #swing #пользовательский интерфейс

Вопрос:

Смещенные поля

Чего я хочу.

Мой код-

 import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

 class Test2 extends JFrame {

JPanel panel = new JPanel();
JLabel label1 = new JLabel("Enter 1st Number");
JLabel label2 = new JLabel("Enter 2nd Number");
JLabel label3 = new JLabel("Press to add");
JLabel label4 = new JLabel("Check Answer");
JButton button = new JButton("Press");
JTextField text1 = new JTextField(50);
JTextField text2 = new JTextField(50);

public Test2() {
    setTitle("Tutorial");
    setVisible(true);
    setSize(1080, 720);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    text1.setBounds(90,60,86,23);
    text2.setBounds(233,60,92,23);
    button.setBounds(161,109,89,23);

    panel.add(text1);
    panel.add(text2);
    panel.add(button);
    panel.add(label1);
    panel.add(label2);
    panel.add(label3);
    panel.add(label4);

    add(panel);
}

public static void main(String[] args) {
    Test2 t = new Test2 ();

 }
}
 

Я также собираюсь написать код для добавления 2 чисел, и если пользователь вводит буквы, я также создам исключение. Но я хочу, чтобы они сначала выровнялись. Я не могу использовать форму GUI, поскольку это для практики.

Комментарии:

1. Проблема здесь в том, что вы добавляете Component s к Container s, которые не имеют конкретного Layout значения, вы должны прочитать это docs.oracle.com/javase/tutorial/uiswing/layout/visual.html чтобы понять, что вам нужно сделать, в вашем конкретном случае вы можете узнать, как использовать GridLayout

2. Вы бы использовали GridBagLayout .

Ответ №1:

Не используйте setBounds() .

используйте макет сетки из 4 строк и 2 столбцов

Ответ №2:

вам нужно использовать сетку с 2 столбцами и 4 строками, чтобы сделать их такими:

 class Test2 extends JFrame {

    JPanel panel = new JPanel();
    JLabel label1 = new JLabel("Enter 1st Number");
    JLabel label2 = new JLabel("Enter 2nd Number");
    JLabel label3 = new JLabel("Press to add");
    JLabel label4 = new JLabel("Check Answer");
    JButton button = new JButton("Press");
    JTextField text1 = new JTextField(50);
    JTextField text2 = new JTextField(50);

    public Test2() {
        GridLayout gb = new GridLayout(4, 2);
        panel.setLayout(gb);
        panel.add(label1);
        panel.add(text1);
        panel.add(label2);
        panel.add(text2);
        panel.add(label3);
        panel.add(button);
        panel.add(label4);
        
        add(panel);
        
        setTitle("Tutorial");
        setVisible(true);
        setSize(250, 150);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
    }

    public static void main(String[] args) {
        Test2 t = new Test2();
    }
}
 

вывод:
панель