Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Одобрено
редакционно-издательским советом
Балаковского инженерно-
технологического института
Балаково 2015
Цель работы: знакомство с элементами управления SWING на при-
мере отображения динамических данных в таблице jTable.
Основные понятия
Практически каждое приложение Windows, за исключением самых
простейших, имеет такие органы управления, как меню, кнопки, поля ре-
дактирования текстовой информации, переключатели с независимой и за-
висимой фиксацией и списки. Кроме того, приложение Windows может со-
здавать диалоговые панели, содержащие перечисленные выше и другие
органы управления.
В окне апплета вы также можете разместить некоторые из перечис-
ленных выше органов управления, а именно:
кнопки;
переключатели с независимой фиксацией;
переключатели с зависимой фиксацией;
статические текстовые поля;
однострочные и многострочные поля редактирования текста;
списки;
полосы просмотра.
Самый большой и едва ли приятный сюрприз для вас это то, что при
размещении перечисленных органов управления в окне апплета вы не мо-
жете задать для них точные координаты и размеры. Размещением занима-
ется система управления внешним видом Layout Manager, которая распо-
лагает органы управления по-своему. Вы, однако, можете задавать не-
сколько режимов размещения (последовательное, в ячейках таблицы и так
далее), но не координаты или размеры. Это сделано для обеспечения неза-
висимости приложений Java от платформ, на которых они выполняются.
2
Органы управления создаются как объекты классов, порожденных от
класса Component (рис. 3). Поэтому в дальнейшем мы будем называть ор-
ганы управления компонентами.
3
Для того чтобы понять, как компоненты размещаются на поверхно-
сти окна апплета системой Layout Manager, рассмотрим другую взаимо-
связь классов Java, показанную на рис. 4.
4
Существует такая парадигма в программирование Модель-Вид-
Контроллер. Если коротко, то она позволяет разделить весь код на не-
сколько больших функциональных блоков, код которых отделен макси-
мально друг от друга. Java Swing в реализации своих компонентов также
пытается следовать данной парадигме. В результате чего компоненты, та-
кие как JTable, внутри себя разделяют код, который занимается только от-
рисовкой и код, который занимается поставкой данных для отрисовки.
Пример выполнения
Исходный код программы представлен далее:
Создание собственной модели в отдельном классе:
package javaapplication3;
import javax.swing.table.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;
}
}
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
}
8
9. Чем отличаются методы insertRow и addRow в Java?
10. Как удалить выделенную строку в таблице jTable?