Здравствуй, уважаемый читатель. В этой статье, я расскажу о том, как можно с помощью Java создать простой интерфейс для своей программки. Для того, чтобы создать простой пользовательский интерфейс, вы должны создать новый класс в своем пакете, который бы наследовал JFrame (находящийся в пакете javax.swing). Если класс наследует JFrame, это значит, что он представляет из себя самое простое окно, которое можно перетащить, свернуть, развернуть или закрыть. Итак, вы создали свой класс, наследующий JFrame, также не забудьте добавить в нем метод main. В методе main пропишите создание экземпляра нашего класса, дабы не случилось каких-либо ошибок, связанных со "статической природой" main'а. В конструкторе нашего класса, давайте напишем следующий код:
Код
this.setTitle("My first JFrame!"); // Указываем заголовок окна this.setSize(800, 600); // Размер this.setVisible(true); // Делаем окно видимым
Как вы уже поняли, все эти методы наследуются от JFrame. Можете запустить наше приложение и увидите свое окошко с названием "My first frame!" и размером 800х600 пикселей. Теперь давайте создадим кнопку, при нажатии на которую будет появляться надпись "Кликнуто!". Создание элементов интерфейса в Java происходит очень просто: вы создаете экземпляр желаемого класса (например, JButton), а затем добавляете его на JFrame. Попробуем это и сделать:
Код
JButton button = new JButton("Кликни меня!!!"); // Создаем кнопку с текстом "Кликни меня!!!" this.add(button);
Запускаем и!.. О, ужас! Наша кнопка заняла абсолютно все окно. А произошло это потому, что мы не задали еще один параметр нашему JFrame. А именно Layout! Именно он отвечает за разположение объектов на фрейме. По умолчанию, он содержит такое значение, при каком элемент интерфейса займет все окно (что мы, собственно, и видели). А исправить это можно с помощью метода setLayout(LayoutManager manager). Для этого добавим после строки this.setVisible(true); строку:
Код
this.setLayout(null); // Убираем Layout Manager, тем самым делая так, чтобы все элементы интерфейса распологались там, где мы пропишем и имели размеры такие, какие мы пропишем
Запускаем теперь и!.. Наша кнопка пропала вообще... А это произошло потому, что мы не указали ей ее координаты и размеры. Делается это аналогичным образом, как и с JFrame:
Код
button.setLocation(300, 200); // Устанавливаем кнопку в координатах x = 300, y = 200 button.setSize(200, 100); // Размеры: 200х100 пикселей
Или:
Код
button.setBounds(300, 200, 200, 100); // button.setBounds(x, y, Width, Height)
Теперь кнопка отображается как надо. Большая такая, красивая кнопища! Давайте теперь сделаем так, чтобы при нажатии на нашу кнопищу выводилось какое-то сообщение. Для этого нам нужно либо создать новый класс, который бы осуществлял интерфейс ActionListener, либо сделать, чтобы наш фрейм его осуществлял. Я рекомендую использовать второй вариант, если это возможно. ActionListener - Это такой интерфейс, в котором содержится один метод - actionPerformed(ActionEvent event), этот метод вызывается, когда, например, была нажата какая-то кнопка или что-то вроде того. Итак, сделаем, чтобы наш класс осуществлял этот интерфейс, изменив его "оглавление": public class <название_класса> extends JFrame implements ActionListener Теперь мы можем спокойно добавить еще пару строк в наш конструктор:
Код
button.setActionCommand("Button1"); // Задаем строку, которая будет отправляться в обработчик событий button.addActionListener(this); // Делаем так, чтобы кнопка при нажатии вызывала метод actionPefrormed() из нашего класса
Здесь мы видим, что я задал какую-то там строку, которая куда-то будет отправляться. На самом деле, поскольку у нас одна-единая кнопка, это делать необязательно, но я решил все-таки рассказать и о таком способе обработки событий. Так вот. Вы наверняка заметили, что в метод actionPerformed() передается некий объект ActionEvent. Этот объект содержит данные о событии, в том числе и эту некую ActionCommand. То есть, при нажатии на нашу заветную кнопочку, в событие ActionEvent будет передана строка "Button1". Зачем нужна вся эта путаница? Для того, чтобы не создавать по классу на каждую кнопку, ведь если у нас не одна кнопка, а, допустим, кнопок двадцать? Будет неудобно иметь такие классы: ActionListenerButton1, ActionListenerButton2, да и не экономно. А вот эта одна строчка позволит различать, какая же кнопка была нажата. Посмотрим теперь на сам метод обработки события:
Код
public void actionPerformed(ActionEvent event) { if(event.getActionCommand().equals("Button1")) // Если строка, поступившая от "виновника торжества" равна строке, отправляемой нашей кнопкой { JOptionPane.showMessageDialog(this, "Кликнуто!"); // Выводим диалоговое окошко с текстом "Кликнуто!". } }
На этом все! Теперь вы можете создавать свои простенькие (и не очень) интерфейсы, с использованием Swing (так называется библиотека Java, которую мы использовали).