воскресенье, 1 декабря 2013 г.

Первое оконное приложение

Практически каждый начинающий программист пишет консольные программы, с этого начинают все. Как говориться «я просто написал hello world, и тут понеслось». Однако писать консольные программки уже начинает надоедать и
новички пробуют осваивать построение графических интерфейсов, присматриваться к фреймворкам или выбирают свою нишу в мире программирования, будь то мобильные платформы, серверные и клиентские приложения для десктопов и т.д. Направлений можно перечислять много, но не буду на этом зацикливаться, разговор пойдет о стандартной графической библиотеке Swing.

В данной статье мы рассмотрим:
  • Краткая теория про Swing и AWT. 
  • Обзор стандартных компонентов. 
  • Пишем первое приложение выводящее ваше имя. 
  • Ссылки для дополнительного чтения.
Библиотека Swing была создана компанией Sun Microsystems, как надстройка над AWT,она расширяет классы и интерфейсы AWT. Кратко говоря Swing - это графическая библиотека, с помощью которой можно создавать интерфейсы для программ. В своем наборе имеет такие компоненты как кнопки, диалоговые окна, текстовые поля, чек-боксы и т.д.

На счет AWT забыл упомянуть, это ранняя библиотека графических компонентов, её особенностью было то, что она имела ограничения в разработке интерфейса, то есть разработанный интерфейс под любой платформой, будет отображать лишь элементы которые есть в самой ОС, выходит, что, как бы, нету возможности создавать кастомные объекты. Так же есть возможность работы этих двух библиотек совместно, поскольку как говорилось ранее Swing построена на AWT. Разница между ними разве что в сложности построения (разработки) интерфейса.

Для группировки компонентов интерфейса принято использовать контейнеры (Container). Обычно используют JFrame, так же имеются JWindows и JApplet. Рассмотрим их основные методы:
-setBounds(x,y,w,h); - с помощью этого метода задаются размеры окна, а так же ширина и высота;
-setResizable(boolean); - этот метода позволяет задать, можно ли будет изменить размер окна, или же оставить его фиксированным;
-setTitle(String); - метод позволяет задать название окна;
-setVisible(boolean); - отображение окна;
-setDefaultCloseOperation(operation); – позволяет указать операцию, которая будет произведена по закрытии окна.

Swing обладает множеством «строительных блоков», основные из них перечислены ниже:
  • JLabel – элемент для отображения текста; 
  • JTextField - элемент для редактирования текста; 
  • JButton – обычная кнопка; 
  • JCheckBox – элемент выбора, так называемый флажок; 
  • JRadioButton - элемент выбора, так называемый «радио-кнопки».
Теперь рассмотрим менеджеры (LayoutManager) для размещения этих «блоков»:
  • FlowLayout - используется для последовательного отображения элементов (если элемент не помещается в конкретную строку, он отображается в следующей); 
  • GridLayout - отображения элементов в виде таблицы с одинаковыми размерами ячеек; 
  • BorderLayout - используется при отображении не более 5 элементов (эти элементы располагаются по краям фрейма и в центре: North, South, East, West, Center); 
  • BoxLayout - отображает элементы в виде рядка или колонки; 
  • GridBagLayout - позволяет назначать месторасположение и размер каждого виджета. Это самый сложный, но и самый эффективный вид отображения; 
Ну, в общем, как-то так.

Теперь возникает вопрос, как обрабатывать события, ну например нажатие кнопки?

Для этих случаев были разработаны такие классы как Java.util.java.awt и java.event.
Кратко говоря, система построена на слушателях событий и передатчиках событий (об этом отдельно напишу). Для отслеживания действий используется интерфейс ActionListener.

Вот, вроде бы немножко объяснил, что и к чему, теперь можно написать простенький пример. Напишем приложение, которое будет выводить ваше имя (говорить вам привет), написанное в поле ввода текста, и по нажатию кнопки покажет вам "привет (Вася,Петя,Саша)".

И так, начнем:
1. Откройте Eclipse IDE (надеюсь, она у вас есть).
2. Добавьте плагины для создания графического интерфейса. Для этого:
      2.1 Перейдите в Help -> Install New Software;
      2.2 В поле Work with выберите --All Available Sites— ;
      2.3 У вас появиться список множества плагинов;
      2.4 Найдите поле под названием General Purpose Tools;
      2.5 В вкладке General Purpose Tools выберите плагины как показано ниже на скрине
     2.6   Далее читаем лицензионное соглашение, соглашаемся и Next -> Next -> Finish
     2.7  Среда разработки вежливо попросит вас её перезапустить.
3. Затем создайте новый проект (думаю уже умеете).
4. В проект добавьте новую форму (JFrame), как показано на скрине


5. Создав её можете поэкспериментировать с разработкой интерфейса, повставлять кнопочки и т.д.
6. Добавим в форму такой код:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MyFrame extends JFrame implements ActionListener {
    private JTextField textField;
    private JLabel lblNewLabel;
    String name;

    public MyFrame() {
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 setBounds(100, 100, 450, 300);
 getContentPane().setLayout(null);

 JButton btnOk = new JButton("OK");
 btnOk.addActionListener(this);

 btnOk.setBounds(335, 11, 89, 23);
 getContentPane().add(btnOk);

 textField = new JTextField();
 textField.setBounds(10, 12, 315, 20);
 getContentPane().add(textField);
 textField.setColumns(10);

 lblNewLabel = new JLabel("Имя");
 lblNewLabel.setBounds(10, 146, 315, 14);
 getContentPane().add(lblNewLabel);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
 name = textField.getText();
 lblNewLabel.setText("привет " + name);

    }
}
7. Затем создайте класс Main.
public class Main {
    public static void main(String[] args) {
 MyFrame frame = new MyFrame();
 frame.setVisible(true);
    }
}

Ну вот и все, можете запустить программу на выполнение и ввести свое имя.
У вас должно появиться такое окно, вот скриншот как всё выглядит у меня.


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

Тут забираем исходники.
Про Swing можно почитать тут  и тут. Удачи Вам в начинаниях.

3 комментария:

  1. Main method not found in class GUI, please define the main method as:
    public static void main(String[] args)
    or a JavaFX application class must extend javafx.application.Application

    ОтветитьУдалить
  2. Ответы
    1. Так класс Main кто создавать будет? Всё же написано.

      Удалить