Java/Первое окно: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Работа в интернете официальное трудоустройство.
м Откат правок 5.228.6.87 (обс.) к версии Ping08
Строка 1: Строка 1:
{{gui_nav}}
Ведущая компания в России и странах СНГ по продаже авиабилетов «Airline-online»
{{Java/Chapters}}
Так как в большинстве своем сегодняшние начинающие программисты не любят окно командной строки - приведу пример оконного приложения.
Крупнейшая международная компания по продаже А/В билетов
== Начнем с простого ==
срочно набирает сотрудников на постоянную основу для несложной
<source lang="java">
работы через интернет, с ежедневными выплатами от 11 000 руб.
import javax.swing.JFrame;

Работая в нашей компании Вы получаете:
public class MyWindowApp extends JFrame { //Наследуя от JFrame мы получаем всю функциональность окна

- Соблюдение трудового кодекса
public MyWindowApp(){
- Полный соцпакет, оплачиваемый отпуск, больничный, санаторий.
super("My First Window"); //Заголовок окна
- Каждый наш сотрудник на дому гарантированно получает высокий доход. руб. в день.
setBounds(100, 100, 200, 200); //Если не выставить
- Гарантированные стабильные выплаты заработанных денег.
//размер и положение
- Выплаты происходят ежедневно на банковские карты или электронные кошельки.
//то окно будет мелкое и незаметное
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //это нужно для того чтобы при
Пройдите регистрацию у нас на сайте. > airline.zarplatt.ru <
//закрытии окна закрывалась и программа,
//иначе она останется висеть в процессах
Без вложений, опыт и профессиональные навыки не требуются!
}

public static void main(String[] args) { //эта функция может быть и в другом классе
MyWindowApp app = new MyWindowApp(); //Создаем экземпляр нашего приложения
app.setVisible(true); //С этого момента приложение запущено!
}
}
</source>

Вот у нас и получилось ничего не делающее приложение!

== Делаем что-то полезное ==

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

=== Дизайн ===
Это то, что мы примерно хотим увидеть:
{| border=1
|colspan=2 style="background:red"|<font color="white">Вороносчет</font>
|-
|colspan=2|'''Ворон на заборе : 666'''
|-
|Ворона прилетела
|Ворона улетела
|}

=== Скелет программы ===
Пишем программу:

<source lang="java">
import java.awt.*;
import java.awt.event.*;
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);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
VoronCalc app = new VoronCalc();
app.setVisible(true);
app.pack(); //Эта команда подбирает оптимальный размер в зависимости от содержимого окна
}
}
</source>

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

[[Файл:СrowCalc.png]]
<nowiki></nowiki>

=== Добавляем функциональность ===

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

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

==== addCrow ====
Добавляем [[Java/Listeners|listener]] для кнопки addCrow.
<source lang="java">
addCrow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
voron = voron+1; //Добавляем одну ворону
updateCrowCounter(); //Сообщаем приложению, что количество ворон изменилось
}
});
</source>

==== removeCrow ====
Добавляем [[Java/Listeners|listener]] для кнопки removeCrow.
<source lang="java">
removeCrow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if( voron > 0 ) {
voron = voron - 1;
updateCrowCounter(); //Сообщаем приложению, что количество ворон изменилось
}
}
});
</source>

==== updateCrowCounter ====
<source lang="java">
private void updateCrowCounter() {
countLabel.setText("Crows:" + voron);
}
</source>

=== Конечный результат ===
* [[Java/Первое окно/VoronCalc.java|VoronCalc.java]] - главный класс программы

{{BookCat}}

[[en:Java Programming/Events and Buttons]]
[[pt:Java/Swing/Eventos e Action listeners]]

Версия от 22:09, 30 декабря 2016

Содержание

  1. Python
    1. tkinter Стандратный модуль для создания приложений с GUI интерфейсом.
  2. VBA
    1. VBA GUI в среде MS Excel.
  3. HTML
    1. HTML book Обзор GUI в HTML.
  4. Pascal
    1. Windows Forms Интерфейс (API) для создания GUI-приложений.

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

Начнем с простого

import javax.swing.JFrame;

public class MyWindowApp extends JFrame { //Наследуя от JFrame мы получаем всю функциональность окна

  public MyWindowApp(){
    super("My First Window"); //Заголовок окна
    setBounds(100, 100, 200, 200); //Если не выставить 
                                   //размер и положение 
                                   //то окно будет мелкое и незаметное
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //это нужно для того чтобы при 
                                                    //закрытии окна закрывалась и программа,
                                                    //иначе она останется висеть в процессах
  }

  public static void main(String[] args) { //эта функция может быть и в другом классе
    MyWindowApp app = new MyWindowApp(); //Создаем экземпляр нашего приложения
    app.setVisible(true); //С этого момента приложение запущено!
  }
}

Вот у нас и получилось ничего не делающее приложение!

Делаем что-то полезное

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

Дизайн

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

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

Скелет программы

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

import java.awt.*;
import java.awt.event.*;
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);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

public static void main(String[] args) {
    VoronCalc app = new VoronCalc();
    app.setVisible(true);
    app.pack(); //Эта команда подбирает оптимальный размер в зависимости от содержимого окна
  }
}

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

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

Пришло время добавить немного интерактивности. Нам нужно сделать 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);
}

Конечный результат