Основы программирования GUI на языке Java. Урок 1.

В этой короткой статье хочу описать процесс создания небольшой программы, поддерживающей GUI на языке Java. Предполагается, что читатель знаком с основами языка Java.

И так, какие инструменты нам необходимы:

  • Java Virtual Machine (OpenJDK или Oracle JDK)
  • Intellij IDEA (или другое IDE для Java)

После установки необходимого софта, открываем Intellij IDEA и создаем новый проект: File -> New Project…

java-lesson1-1

Я назвал проект guiBase. Как видно на скрине, папка src не содержит ничего, поэтому создаем в ней наш главный класс, содержащий функцию main.

public class Main {

   public static void main(String[] args) {
      System.out.println("Hello, Govzalla!");
   }
}

Содеражние главного класса видите выше. Мы уже сейчас можем создать проект (Build project) и запустить его (Run). Внизу в терминале вашего IDE вы увидите сообщение “Hello, Govzalla!“. Но как вы сами поняли - GUI он не поддерживает.

На данном этапе у нас уже есть работающая программа, но без поддержки GUI. А сейчас в той же папке src создадим GUI Form: New -> GUI Form

java-lesson1-2

Открываем созданную GUI форму, нажимаем на JPanel и задаем его идентификатор в поле field name, я задал panel.

[AdSense-A]

После чего перетаскиваем на форму с правой стороны JTextField, JPasswordField и JButton:

java-lesson1-3

Осталось добавить код и связать нашу форму с ним. Когда мы добавляли форму MainWindow, автоматически создался и класс MainWindow, этот класс является классом созданной формы, т.е. именно этот класс будет обслуживать все события данной формы.

java-lesson1-4

Содержание этого класса будет автоматически редактироваться во время изменения формы, например если добавить новую кнопку JButton, мы увидим его идендификатор в приватных атрибутах (свойстах) класса MainWindow.

Хотя класс нашего окна содержит необходимые элементы, но даже сейчас он не имеет ничего общего с GUI, поэтому расширим его с помощью JFrame и унаследуем всю основную и необходимую функциональность GUI.

В данный момент мы имеем форму MainWindow и класс MainWindow расширенный с помощью JFrame. Сейчас нам необходимо определить все добавленные GUI элементы как содержание класса MainWindow this.getContentPane().add(panel); После чего содержание файла MainWindow.java будет изменено следующим образом:

import javax.swing.*;

public class MainWindow extends JFrame {

	private JTextField textField1;
	private JPasswordField passwordField1;
	private JButton button1;
	private JPanel panel;

	public MainWindow() {
		this.getContentPane().add(panel);
	}
}

Если попробуете запустить код, вы снова увидите то же самое сообщение “Hello, Govzalla!“. Дело в том, что мы создали класс и форму к нему, но не создали инстанцию этого класса.

Пришло время изменить файл Main.java и добавить туда код создания нашего GUI:

import java.awt.*;

public class Main {

	public static void main(String[] args) {
		// Создаем инстанцию класса MainWindow
		MainWindow mainWindow = new MainWindow();

		// Упаковываем все элементы с нашей формы
		mainWindow.pack();

		// Изменяем размеры окна
		mainWindow.setSize(new Dimension(200, 200));

		// Отображаем созданное окно
		mainWindow.setVisible(true);
	}
}

Запускаем код

java-lesson1-5

Нажав на кнопку Button вы заметите, что программа никак не реагирует. Дело в том, что мы еще не добавили слушатель (Listener) для событий (Events) кнопки Button.

[AdSense-B]

Слушатель событий (Event listener) JButton должен быть имплентацией адаптера ActionListener, поэтому добавим следующий код в тело класса MainWindow:

private class MyButtonListener implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent actionEvent) {

	}
}

Метод actionPerformed() будет обрабатывать все события кнопки button1, но для начала еще необходимо указать кнопке button1 какой класс будет обрабатывать, поэтому добавим следующий код в конструктор класса MainWIndow: this.button1.addActionListener(new MyButtonListener()); Чтобы наш обработчик не был бессмысленным добавим следующий код в метод actionPerformed():

@Override
public void actionPerformed(ActionEvent actionEvent) {
	
	if (textField1.getText().equals(passwordField1.getText())) {
		JOptionPane.showMessageDialog(null, "Success");
	} else {
		JOptionPane.showMessageDialog(null, "Failure");
	}
}

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

 

Специально для сайта Govzalla.com