Вы находитесь на странице: 1из 9

АПРОБАЦИЯ

Балаковский инженерно-технологический институт — филиал


федерального государственного автономного образовательного учреждения
высшего профессионального образования
«Национальный исследовательский ядерный университет «МИФИ»

СОЗДАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ SWING НА ЯЗЫКЕ JAVA

Методические указания к выполнению практических работ по дисциплине


«Объектно-ориентированное программирование»
для студентов всех форм обучения по направлению 09.03.02

Одобрено
редакционно-издательским советом
Балаковского инженерно-
технологического института

Балаково 2015
Цель работы: знакомство с элементами управления SWING на при-
мере отображения динамических данных в таблице jTable.

Основные понятия
Практически каждое приложение Windows, за исключением самых
простейших, имеет такие органы управления, как меню, кнопки, поля ре-
дактирования текстовой информации, переключатели с независимой и за-
висимой фиксацией и списки. Кроме того, приложение Windows может со-
здавать диалоговые панели, содержащие перечисленные выше и другие
органы управления.
В окне апплета вы также можете разместить некоторые из перечис-
ленных выше органов управления, а именно:
 кнопки;
 переключатели с независимой фиксацией;
 переключатели с зависимой фиксацией;
 статические текстовые поля;
 однострочные и многострочные поля редактирования текста;
 списки;
 полосы просмотра.
Самый большой и едва ли приятный сюрприз для вас это то, что при
размещении перечисленных органов управления в окне апплета вы не мо-
жете задать для них точные координаты и размеры. Размещением занима-
ется система управления внешним видом Layout Manager, которая распо-
лагает органы управления по-своему. Вы, однако, можете задавать не-
сколько режимов размещения (последовательное, в ячейках таблицы и так
далее), но не координаты или размеры. Это сделано для обеспечения неза-
висимости приложений Java от платформ, на которых они выполняются.

2
Органы управления создаются как объекты классов, порожденных от
класса Component (рис. 3). Поэтому в дальнейшем мы будем называть ор-
ганы управления компонентами.

Рис. 3. Взаимосвязь классов органов управления в приложениях Java.


Класс Button позволяет создавать стандартные кнопки. Если вам
нужна нестандартная кнопка (например, графическая кнопка), вы можете
создать ее на базе класса Canvas.
Для создания переключателей с независимой или зависимой фикса-
цией предназначен класс CheckBox.
С помощью класса Label вы можете создавать в окне апплета тексто-
вые строки, например, надписи для других компонент. Эти строки не ре-
дактируются пользователем.
Класс List, как нетрудно догадаться из названия, предназначен для
создания списков.
С помощью класса Scrollbar вы можете создавать полосы просмотра,
которые используются, в частности, могострочными полями редактирова-
ния текста.
Класс TextComponent служит базовым для двух других классов -
TextField и TextArea. Первый из них предназначен для создания одно-
строчных редакторов текста, второй - для создания многострочных редак-
торов текста.

3
Для того чтобы понять, как компоненты размещаются на поверхно-
сти окна апплета системой Layout Manager, рассмотрим другую взаимо-
связь классов Java, показанную на рис. 4.

Рис. 4. Компоненты и контейнеры.


Класс Component служит в качестве базового класса для класса
Container. Объекты этого класса, которые мы будем называть контейнера-
ми, могут содержать объекты классов Component и Container. Таким обра-
зом, внутри контейнеров могут находиться компоненты и другие контей-
неры.
Класс Applet, так же как и другие классы, произведенные от класса
Container, является контейнером. Это означает, что апплет может содер-
жать в себе компоненты (такие как органы управления) и контейнеры.
Заметим, что класс Applet наследуется от класса Container через
класс Panel, в котором определены методы системы Layout Manager.
Настраивая соответствующим образом Layout Manager, мы можем менять
стратегию размещения компонент внутри окна апплета.
В окне апплета вы можете создать несколько объектов класса Panel
(панелей), разделяющих окно на части. Для каждой такой панели можно
установить свою стратегию размещения компонент и контейнеров, что
позволяет выполнять достаточно сложную компоновку в окне апплета.

4
Существует такая парадигма в программирование Модель-Вид-
Контроллер. Если коротко, то она позволяет разделить весь код на не-
сколько больших функциональных блоков, код которых отделен макси-
мально друг от друга. Java Swing в реализации своих компонентов также
пытается следовать данной парадигме. В результате чего компоненты, та-
кие как JTable, внутри себя разделяют код, который занимается только от-
рисовкой и код, который занимается поставкой данных для отрисовки.

Технология выполнения работы


1. Добавить таблицу jTable на форму.
2. Настроить таблицу средствами IDE NetBeans.
3. Создать собственную модель таблицы, наследуя класс от
DefaultTableModel.
4. Настроить методы обработки событий таблицы.
5. Рассмотреть методы добавления и вставки строк в таблицу.
6. Создать приложение, реализующее добавление данных из тексто-
вых полей в таблицу.

Пример выполнения
Исходный код программы представлен далее:
Создание собственной модели в отдельном классе:
package javaapplication3;

import javax.swing.table.DefaultTableModel;

public class MyTableModel extends DefaultTableModel {

public MyTableModel() {

5
super(new String[]{"Название", "Цена за шт.", "Количество",
"Стоимость"}, 1);
super.setValueAt("Итого",getRowCount() - 1, 2);
super.setValueAt("0.0", getRowCount() - 1, 3);
}

@Override
public boolean isCellEditable(int row, int column) {
if (column != 0 || row == getRowCount() - 1) {
return false;
}
return true;
}
}

Исходный код основного оконного приложения (по функциям):


MyTableModel mtm = new MyTableModel();
public NewJFrame() {
initComponents();
setLocationRelativeTo(null);
jTable1.setModel(mtm);
jTextField1.requestFocus();
jSpinner1.setValue(1);
}
public void sum(){
double sum = 0;
for (int i = 0; i < mtm.getRowCount()-1; i++) {
sum += Double.parseDouble(mtm.getValueAt(i, 3).toString());
}

6
jTable1.setValueAt(sum, mtm.getRowCount()-1, 3);

}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// +
String name = jTextField1.getText();
String price = jTextField2.getText();
String count = jSpinner1.getValue().toString();
String cost = Double.toString(Double.parseDouble(price) * Dou-
ble.parseDouble(count));
mtm.insertRow(mtm.getRowCount() - 1, new String[]{name, price,
count, cost});
jTextField1.setText(null);
jTextField2.setText(null);
jSpinner1.setValue(1);
jTextField1.requestFocus();
sum();

}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
//-
if(jTable1.getSelectedRow() != mtm.getRowCount()-1)
{
mtm.removeRow(jTable1.getSelectedRow());
sum();
JOptionPane.showMessageDialog(this, "Данные удале-
ны","Оповещение", JOptionPane.ERROR_MESSAGE);

7
}

Пример визуального представление приведѐн на рисунке:

Вопросы для самоконтроля


1. Перечислите компоненты управления в Java?
2. Опишите взаимосвязь классов в Java, отвечающих за графиче-
ский интерфейс пользователя.
3. Какую парадигму используют компоненты Java Swing?
4. Опишите объект jTable.
5. Что такое модель таблицы в Java?
6. Как производится настройка jTable средствами IDE NetBeans?
7. Как производится настройка jTable при помощи класса
DefaultTableModel?
8. За что отвечает и как настраивается метод isCellEditable?

8
9. Чем отличаются методы insertRow и addRow в Java?
10. Как удалить выделенную строку в таблице jTable?