Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

TarasovVLJavaAndEclipse_20_VisualProgramming

.pdf
Скачиваний:
12
Добавлен:
08.04.2015
Размер:
1.36 Mб
Скачать

Рис. 14. Среда Eclipse в режиме визуальной разработки

Автоматически сгенерированный код приведен в листинге 1.

Листинг 1. Код автоматически созданного приложения

import java.awt.BorderLayout; import java.awt.EventQueue;

import javax.swing.JFrame; import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

public class frmColorForm extends JFrame {

private JPanel contentPane;

/**

* Launch the application. */

public static void main(String[] args) { EventQueue.invokeLater(new Runnable() {

public void run() { try {

frmColorForm frame = new frmColorForm(); frame.setVisible(true);

} catch (Exception e) { e.printStackTrace();

}

}

});

}

/**

* Create the frame. */

public frmColorForm() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 206, 184);

contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane);

}

}

Размещение компонентов на форме

На закладке Design находятся проектируемая форма, палитра компонентов (Palette), окно свойств выбранного компонента (Properties) и другие окна (рис.15). Копоненты можно рать из палитры, размещать на форме и назначать свойства в окне свойств.

Рис. 15. Режим Design

Разработаем приложение, которое по нажатию кнопки будет изменять цвет формы.

Обратим внимание, что на форме размещена панель contentPane, на которой мы будем размещать компоненты (рис.16).

Установим для contentPane абсолютный режим выравнивая, выбрав соответствующее значение для свойства Layout (рис.16). В этот режиме компоненты будут занимать на форме положение, заданное в процессе разработки.

Рис. 16. Панель contentPane

Выберем в палитре компонентов кнопку JButton (рис. 17) и нарисуем прямоугольник на форме (рис.)

Рис. 17. Выбор компонента в палитре

Рис. 18. Размещение компонента на форме

Используя свойство Variable, зададим кнопке имя btnChangeColor вместо имени btnNewButton, данного по умолчанию, и зададим свойство text - "Изменить цвет формы", которое содержит надпись на кнопке

(рис.19).

Рис. 19. Ввод имени кнопки и надписи на ней

Расположим на форме метку JLabel, которую назовем lblNameColor (рис.20). Отображаемый меткой текст содержится в свойстве text. Его сделаем пока пустым, а формировать будем программным путем.

Рис. 20. Создание метки

Создание обработчиков событий

С помощью кнопки Show events (рис.21) переключим окно Properties (свойств) на показ событий кнопки.

Рис. 21. Переключение окна Properties между показом свойств и событий

Выберем для кнопки событие performed из раздела action и дважды щелкнем нему мышью (рис.22). Будет создана заготовка обработчика события нажатия кнопки (листинг 2).

Рис. 22. Создание обработчика события

Листинг 2. Заготовка обработчика для кнопки

btnChangeColor.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

}

});

Обратим внимание, что обработчик события для кнопки представляет собой инструкцию в коде конструктора класса формы. В листинге приведен полный код этого конструктора вместе с добавлениями, внесенными в код обработчика для кнопки. Смысл действий бработчика состоит в том, чтобы переключать цвет формы с красного на зеленый и обратно. При этом в метке должно отображаться название текуего цвета.

Листинг 3. Конструктор формы с кодом обработчика

public frmColorForm() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 217, 184);

contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null);

JButton btnChangeColor = new JButton( "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0446\u0432\u0435\u0442 \u0444\u043E\u0440\u043C\u044B");

btnChangeColor.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

if(contentPane.getBackground() == Color.RED){ contentPane.setBackground(Color.GREEN); lblNameColor.setText("Зеленый");

}

else{

contentPane.setBackground(Color.RED); lblNameColor.setText("Красный");

}

}

});

btnChangeColor.setBounds(25, 39, 161, 23); contentPane.add(btnChangeColor);

JLabel lblNameColor = new JLabel(""); lblNameColor.setBounds(25, 90, 145, 23); contentPane.add(lblNameColor);

}

Из приведенного кода ясна, что кнопка и метка создаются динамически в конструкторе формы с испоьзованием оператора new, причем сначала создается кнопка, а потом метка, поэтому имя метки lblNameColor не будет видно в обработчике для кнопки, как создаваемое ниже по тексту программы. Поставим последние три строки, создающие метку, перед созданием кнопки и объявим переменную lblNameColor как final.

Обратим также внимание на конструктор для кнопки, в который передается строка с надписью на кнопке:

JButton btnChangeColor = new JButton( "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0446\u0432\u0435\u0442 \u0444\u043E\u0440\u043C\u044B");

Строка содержит коды русских букв надписи на кнопке в двухбайтовой кодировке Unicode. Можно заменить эту строку обычными символами русских букв.

Окончательный вариант конструктора формы приведен в листинге 4.

Листинг 4. Окончательный вариант конструктора формы

public frmColorForm() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 217, 184);

contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null);

final JLabel lblNameColor = new JLabel(""); lblNameColor.setBounds(25, 90, 145, 23); contentPane.add(lblNameColor);

JButton btnChangeColor = new JButton("Изменить цвет формы"); btnChangeColor.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { if(contentPane.getBackground() == Color.RED){

contentPane.setBackground(Color.GREEN); lblNameColor.setText("Зеленый");

}

else{

contentPane.setBackground(Color.RED); lblNameColor.setText("Красный");

}

}

});

btnChangeColor.setBounds(25, 39, 161, 23); contentPane.add(btnChangeColor);

}

}

Запустим программу. Исходное вид окна и виды окна в процессе работы показаны на рис. 23

Рис. 23. Окно программы в различных состояниях

1.3. Ввод данных через текстовые поля

Разработаем приложение для решения квадратного уравнения, в котором продемонстрируем возможности ввода исходных данных через текстовые поля.

Программа 150. Решение квадратного уравнения

Разработка интерфейса программы решения квадратного уравнения

Создадим проект SquareEquation и используя шаблон JFrame добавим в проект класса frmSquareEquation (рис.24).

Рис. 24. Добавление в проект класса формы

Для панели contentPane установим режим выравнивания absolute

(рис. )

Рис. 25. Установка режима absolute выравнивания компонентов

На рис. 26 показан интерфейс программы и указаны использованные имена меток (JLabel), текстовых полей (JTextField) и

кнопки (JButton).

Текстовые поля txt_a, txt_b и txt_c предназначены для ввода соответствующих коэффициентов квадратного уравнения.

Метки lbl_a, lbl_b, lbl_c и lblRightPart выполняют декоративную функцию, чтобы картинка на форма была похожей на привычную математиескую запись.

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

Текстовое поле

 

Метка

txt_b

 

lblTaskName

 

 

 

 

 

 

Метка lbl_a

 

Метка lbl_b

 

 

 

 

 

 

Текстовое поле

 

 

 

Текстовое поле

 

txt_a

 

txt_c

 

 

 

 

Кнопка

 

Метка

btnSolve

 

lblRightPart

 

 

 

 

 

 

 

 

 

 

 

 

Метка

 

Метка labebl

lblSolution

 

 

 

 

 

 

 

 

 

Рис. 26. Интерфейс программы решения квадратного уравнения

Программный код, сгенерированный после визуальной разработки интерфейса, должен быть таким, как приведено в листинге 5.

Обратите внимание, что ссылки на используемые на форме кнопку, метки и текстовые поля сделаны закрытыми членами класса формы. В конструкторе все компоненты создаются и ссылкам на компоненты присваивается значение. Если код не совпадает с приведенным в листинге, можно отредактировать его вручную.

Листинг 5. Код класса frmSquareEquation

// Файл frmSquareEquation.java import java.awt.BorderLayout; import java.awt.EventQueue;

import javax.swing.JFrame; import javax.swing.JPanel;

import javax.swing.border.EmptyBorder; import java.awt.Panel;

import javax.swing.JLabel; import java.awt.Font;

import javax.swing.SpringLayout; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.Color;

import javax.swing.SwingConstants;

public class frmSquareEquation extends JFrame {

private JPanel contentPane; private JLabel lblTaskName; private JTextField txt_a; private JLabel lbl_a; private JTextField txt_b; private JLabel lbl_b;