Java/Первое окно

Материал из Викиучебника

Перейти к: навигация, поиск
Java в примерах

Так как в большинстве своем сегодняшние начинающие программисты не любят окно коммандной строки - приведу пример оконной аппликации.

Содержание

[править] Начнем с простого

import javax.swing.JFrame;
 
public class MyWindowApp extends JFrame { //Наследуя от JFrame мы получаем всю функциональность окна
 
  public MyWindowApp(){
    super("My First Window"); //Заголовок окна
    setBounds(100, 100, 200, 200); //Если не выставить размер и положение - то окно будет мелкое и незаметное
  }
 
  public static void main(String[] args) { //эта функция может быть и в другом классе
    MyWindowApp app = new MyWindowApp(); //Создаем экземпляр нашей аппликации
    app.setVisible(true); //С этого момента аппликация запущена!
  }
}

Вот у нас и получилась ничего не делающая аппликация!

[править] Делаем что-то полезное

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

[править] Дизайн

Это то что мы примерно хотим увидеть:

Вороносчет
Ворон на заборе : 13
Ворона прилетела Ворона улетела

[править] Скелет программы

Пишем программу:

import java.awt.*;
import javax.swing.*;
 
public class VoronCalc extends JFrame {
  private int voron = 0;
  private JLabel countLabel;
  private JButton addCrow;
  private JButton removeCrow;
 
  public VoronCalc(){
    super("Crow calculator");
    //Подготавливаем компоненты объекта
    countLabel = new JLabel("Crows:" + voron);
    addCrow = new JButton("Add Crow");
    removeCrow = new JButton("Remove Crow");
 
    //Подготавливаем временные компоненты
    JPanel buttonsPanel = new JPanel(new FlowLayout()); 
    //Расставляем компоненты по местам
    add(countLabel, BorderLayout.NORTH); //О размещении компонент поговорим позже
 
    buttonsPanel.add(addCrow);
    buttonsPanel.add(removeCrow);
 
    add(buttonsPanel, BorderLayout.SOUTH);
  }
 
public static void main(String[] args) {
    VoronCalc app = new VoronCalc();
    app.setVisible(true);
    app.pack(); //Эта комнда подбирает оптимальный размер в зависимости от содержимого окна
  }
}

После компиляции и запуска - получится что-то такое:

СrowCalc.png

[править] Добавляем функциональность

Пришло время добавить немного интерактивности. Нам нужно сделать 3 вещи:

  1. Научить кнопку addCrow добавлять 1 к переменной voron.
  2. Научить кнопку removeCrow вычитать 1 из переменной voron.
  3. Научить countLabel - обновлять свое значение в зависимости от содержимого переменной voron.

[править] addCrow

Добавляем listener для кнопки addCrow.

addCrow.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e) {
    voron = voron+1;     //Добавляем одну ворону
     updateCrowCounter(); //Сообщаем аппликацие, что количество ворон изменилось
  }
});

[править] removeCrow

Добавляем listener для кнопки removeCrow.

removeCrow.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e) {
    if( voron > 0 ) {
      voron = voron - 1;
      updateCrowCounter(); //Сообщаем аппликации, что количество ворон изменилось
    } 
  }
});

[править] updateCrowCounter

private void updateCrowCounter() {
  countLabel.setText("Crows:" + voron);
}

[править] Конечный результат