java swing как добавить boxlayout

221
17 марта 2022, 08:00

пишу программу которая рассчитает сопротивление резисторов подключенных параллельно

сейчас имею это и оно выводит две кнопки в центре

package sample;
import javax.swing.*;
public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){

            @Override
            public void run() {
                MainWindow mainWindow = new MainWindow();
            }
        });
    }

}

package sample;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class MainWindow extends JFrame {
    public MainWindow() throws HeadlessException{
        setTitle("ВЫчисляшка сопротивления из кучи резисторов");
        setSize(600, 400);
        setLocation(300,200);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        //создаем панель с кнопками по  grid табличный менеджер в пнели указана 1 строка и 2 колонки под кнопки
        JPanel panel1 = new JPanel(new GridLayout(1,2,5,0));
        panel1. add(new JButton("ОК"));
        panel1. add(new JButton("Отмена"));
        //добавляем панель
        add(panel1);
    }
}

у меня два вопроса: как пихать boxLayout и почему все везде создают панели, а у меня просто add(panel1); а должно быть что-то типо panel.add(button) ?

Answer 1

По поводу просто add - это добавление в форму.

Добавление BoxLayout

 BoxLayout boxLayout = new BoxLayout( panel1, BoxLayout.X_AXIS );
 panel1.setLayout( boxLayout );
Answer 2
  1. Как видим с докумментации, BoxLayout используют для построения елементов на каждом новом ряду. Он нам отлично подойдет для левой колонки (текстового поля и лейблов)

  1. Панель это как контейнер (содержащий другие компоненты), который удобно размещать на нужной позиции. Для этого мы можем использовать три панели (можно и с одной, но при большем кол-ве елементов будет нужна панель (проще указать позицию для одной панели, чем нескольких других елементов)), размещенные в один ряд (для этого используем FlowLayout).

По сути у нас такое рассположение объектов:

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
public class SO {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("Вычисляшка сопротивления из кучи резисторов");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.getRootPane().setBorder(new EmptyBorder(15, 15, 15, 15));
        frame.setVisible(true);
        frame.setLayout(new GridLayout());
        // Левая панель
        JPanel left = new JPanel();
        left.setLayout(new BoxLayout(left, BoxLayout.PAGE_AXIS));
        // Центральная
        JPanel mid = new JPanel();
        mid.add(new JButton("Button"));
        // Правая панель
        JPanel right = new JPanel();
        right.add(new JLabel("JLabel"));
        JTextArea text = new JTextArea();
        text.setMaximumSize(new Dimension(800, 50));
        text.setLineWrap(true);
        text.setAlignmentX(Component.LEFT_ALIGNMENT);
        // Добавляю лейблы и выравниваю по левому краю
        JLabel text2 = new JLabel("Text2");
        JLabel text3 = new JLabel("Text3");
        JLabel text4 = new JLabel("Text4");
        text2.setAlignmentX(Component.LEFT_ALIGNMENT);
        text3.setAlignmentX(Component.LEFT_ALIGNMENT);
        text4.setAlignmentX(Component.LEFT_ALIGNMENT);
        left.add(text);
        left.add(text2);
        left.add(text3);
        left.add(text4);
        frame.add(left);
        frame.add(mid);
        frame.add(right);
    }
}

READ ALSO
Расположение JDialog в центре экрана

Расположение JDialog в центре экрана

Подскажите пожалуйста в приведенном коде левых верхний угол объекта JDialog помещен в центр экрана, мне необходимо, что бы в центре экрана был...

85
Задача: Написать интерфейс для пульта от кондиционера

Задача: Написать интерфейс для пульта от кондиционера

Прошу подсказать, не могу понять как как сделать реализацию интерфейса

56
Vertical timeline

Vertical timeline

Я прошу у вас совета, как правильно реализовать данный vertical timeline, такой как на картинке

245
Не происходит запись в БД sqlite (php)

Не происходит запись в БД sqlite (php)

Не происходит запись данных формы в БДНе могу понять почему

68