Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 6 - Строки и окна в java.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
200 Кб
Скачать
☆

JTable – отображение данные в виде таблицы

Очень часто возникает необходимость в приложениях показать данные в виде таблицы с определенным количеством строк и столбцов. В Java Swing для отображения табличных данных используется комопнент JTable. JTable внутри себя не содержит данные, а служит только для их отображения.

Рассмотрим простой пример создания и использования таблицы. Для этого мы создадим таблицу, заполним её тестовыми данными и разместим на панели прокрутки. Размещение таблицы на панели прокрутки – это обычная практика, потому что это удобно и красиво.

Существует несколько способов того, как сказать JTable, какие данные и столбцы следует отображать. Рассмотрим самый простой способ. Для начала определим, какие столбцы мы хотим показывать в таблице. Для примера взяты столбцы проводника Windows – Name (Имя файла или папки), Last modified (Дата последней модификации), Type (Тип) и Size (Размер). Собираем столбцы в массив строк вот так:

String[] columnNames = {"Name",     "Last modified",     "Type",     "Size"};

Далее необходимо определить данные, которые мы хотим отображать в таблице. Делается это тоже при помощи массива строк вот так:

String[][] data = {

     {"addins", "02.11.2006 19:15", "Folder", ""},

     {"AppPatch", "03.10.2006 14:10", "Folder", ""},

     {"assembly", "02.11.2006 14:20", "Folder", ""},

     {"Boot", "13.10.2007 10:46", "Folder", ""},

     {"Branding", "13.10.2007 12:10", "Folder", ""},

     {"Cursors", "23.09.2006 16:34", "Folder", ""},

     {"Debug", "07.12.2006 17:45", "Folder", ""},

     {"Fonts", "03.10.2006 14:08", "Folder", ""},

     {"Help", "08.11.2006 18:23", "Folder", ""},

     {"explorer.exe", "18.10.2006 14:13", "File", "2,93MB"},

     {"helppane.exe", "22.08.2006 11:39", "File", "4,58MB"},

     {"twunk.exe", "19.08.2007 10:37", "File", "1,08MB"},

     {"nsreg.exe", "07.08.2007 11:14", "File", "2,10MB"},

     {"avisp.exe", "17.12.2007 16:58", "File", "12,67MB"}};

Далее необходимо создать собственно сам JTable и передать ему массив столбцов и массив с данными для показа.

JTable table = new JTable(data, columnNames);

Потом создаем JScrollPane, на котором размещаем таблицу и добавляем панель на JFrame. Внешний вид получившегося приложения можно увидеть на рисунке ниже.

Исходный код приложения представлен ниже.

import java.awt.Dimension;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

public class TestFrame extends JFrame {

public static void createGUI() {

JFrame frame = new JFrame("Test frame");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

String[] columnNames = {"Name","Last modified","Type", "Size" };

String[][] data = {

{"addins", "02.11.2006 19:15", "Folder", ""},

{"AppPatch", "03.10.2006 14:10", "Folder", ""},

{"assembly", "02.11.2006 14:20", "Folder", ""},

{"Boot", "13.10.2007 10:46", "Folder", ""},

{"Branding", "13.10.2007 12:10", "Folder", ""},

{"Cursors", "23.09.2006 16:34", "Folder", ""},

{"Debug", "07.12.2006 17:45", "Folder", ""},

{"Fonts", "03.10.2006 14:08", "Folder", ""},

{"Help", "08.11.2006 18:23", "Folder", ""},

{"explorer.exe", "18.10.2006 14:13", "File", "2,93MB"},

{"helppane.exe", "22.08.2006 11:39", "File", "4,58MB"},

{"twunk.exe", "19.08.2007 10:37", "File", "1,08MB"},

{"nsreg.exe", "07.08.2007 11:14", "File", "2,10MB"},

{"avisp.exe", "17.12.2007 16:58", "File", "12,67MB"},

};

JTable table = new JTable(data, columnNames);

JScrollPane scrollPane = new JScrollPane(table);

frame.getContentPane().add(scrollPane);

frame.setPreferredSize(new Dimension(450, 200));

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true); }

public static void main(String[] args) {

javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {

JFrame.setDefaultLookAndFeelDecorated(true);

createGUI(); } }); }}

Обработка событий в Swing

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

Таким образом, при разработке программы необходимо:

  • Выявить события, в ответ на которые потребуется реакция программы.

  • Написать код, реализующий эту реакцию (так называемый обработчик событий).

  • Связать обработчик события с соответствующим событием.

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

Шаблон проектирования «наблюдатель» (listener)

В библиотеке Swing для привязки обработчика события к вызывающему его компоненту используется шаблон проектирования «наблюдатель».

Шаблоны проектирования — это стандартные приемы объектно-ориентированного программирования, позволяющие оптимальным образом справиться с нетривиальными, но часто возникающими в программировании ситуациями. Шаблон проектирования описывает классы, которые необходимо ввести для разрешения такой ситуации и взаимодействие между классами.

Шаблон проектирования «наблюдатель» применяется, когда один объект должен оповещать другие о произошедших с ним изменениях или внешних воздействиях. Такой объект называется наблюдаемым, а объекты, которые следует оповестить — наблюдателями.

Для того, чтобы подобное взаимодействие было возможным, объект-наблюдатель должен иметь метод (или несколько методов) с заранее определенными именем и параметрами. Когда с наблюдаемым объектом произойдет ожидаемое событие, он вызовет соответствующий метод у своего наблюдателя. В этом методе и будет запрограммирована реакция на событие.

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

Заметим, что в данной схеме один наблюдатель может быть зарегистрирован у нескольких объектов (т.е. одинаково реагировать на изменения в каждом из них), а у одного объекта может быть несколько наблюдателей (т.е. при возникновении события выполняется несколько независимых методов-обработчиков). Это весьма увеличивает гибкость программирования.

Механизм обработки событий библиотеки Swing

В контексте графического интерфейса пользователя наблюдаемыми объектами являются элементы управления: кнопки, флажки, меню и т.д. Они могут сообщить своим наблюдателям об определенных событиях, как элементарных (наведение мышкой, нажатие клавиши на клавиатуре), так и о высокоуровневых (изменение текста в текстовом поле, выбор нового элемента в выпадающем списке и т.д.).

Наблюдателями должны являться объекты классов, поддерживающих специальные методы, о которых «знает» наблюдаемый и вызывает их при наступлении события. Такие классы в терминологии Swing называются слушателями.