Java

Где можно найти краткое обучение по использованию JFrame? Чтобы просто приводился порядок поставления и функций.

1. Создаешь JFrame:

JFrame frame = new JFrame("My frame");

Запускаешь. Ничего.

2. Показываешь фрейм после создания:

JFrame frame = new JFrame("My frame");
frame.setVisible(true);

Запускаешь. В углу экрана появляется окно нулевого размера.
Закрываешь его, вручную останавливаешь программу.

3. Перед показом задаешь размеры фрейма:

JFrame frame = new JFrame("My frame");
frame.setSize(640, 480);
frame.setVisible(true);

Запускаешь, видишь в углу фрейм указанных тобой размеров.
Закрываешь его, вручную убиваешь программу.

4. Надоело вручную усыплять программу. Пользователю надо убивать ее при закрытии фрейма. Как бы это сделать?

Оказывается, для этого у фрейма есть метод.

JFrame frame = new JFrame("My frame");
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

Запускаем, закрываем фрейм, программа сразу умирает.

5. Как бы разместить фрейм не в углу, а посередине?
Конечно, можно было бы рассчитать его координаты относительно экрана и центрировать. Но можно сделать проще: задать относительное положение перед показом. Тогда ничего считать не придется. Положение относительно ничего — это положение по центру.

JFrame frame = new JFrame("My frame");
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);

Запускаем, видим фрейм по центру экрана. Закрываем.

6. Пустой фрейм — это скучно. Хочу кнопку!

Нет проблем. Создаем кнопку JButton и добавляем ее на фрейм.
Интересно, куда она встанет?

JFrame frame = new JFrame("My frame");
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);

JButton button = new JButton("Нажми меня!");
frame.add(button);

frame.setVisible(true);

Запускаем. Кнопка растеклась по всей площади фрейма. Ужас.

7. Почему так произошло? Дело в том, что компоненты Swing располагают компоненты согласно указаниям их менеджера раскладки (LayoutManager). Есть разные раскладки: потоком, коробкой, сеткой, корзиной… Это отдельная большая тема, которую можно подробнее изучить здесь:

https://www.tutorialspoint.com/swing/swing_layouts.htm

Я не буду использовать менеджер и просто отключу его у фрейма, чтобы вручную задать положение моей дорогой кнопки.

JFrame frame = new JFrame("My frame");
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setLayout(null);

JButton button = new JButton("Нажми меня!");
button.setLocation(8, 8);
button.setSize(160, 40);
frame.add(button);

frame.setVisible(true);

Запускаем. Кнопочка расположилась около верхнего левого угла фрейма. Ее можно нажимать, но она ничего не делает.

8. Я хочу запрограммировать кнопку. Пусть она меняет надпись, когда я ее нажму.

Нет проблем! Чтобы кнопка реагировала на нажатие, необходимо добавить ей обработчик действия (action listener, буквально «слушатель действия»). Обработчик должен реализовать интерфейс ActionListener.

JFrame frame = new JFrame("My frame");
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setLayout(null);

JButton button = new JButton("Нажми меня!");
button.setLocation(8, 8);
button.setSize(160, 40);

button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
button.setText("Ты молодец.");
}
});

frame.add(button);

frame.setVisible(true);

Запускаем, нажимаем кнопку, радуемся.

———
Думаю, для начала хватит.
ДМ
Дмитрй Муругов
74 253
Лучший ответ
в книге
ПП
Петр Петр
8 005