Урок 31: Продвинутые компоненты Swing
В этом уроке мы рассмотрим использование продвинутых компонентов Swing, таких как таблицы (JTable
), деревья (JTree
) и вкладки (JTabbedPane
). Эти компоненты позволяют создавать более сложные и функциональные графические интерфейсы, которые могут включать в себя отображение больших объемов данных, создание иерархических структур и организацию контента на вкладках.
Использование JTable
JTable
используется для отображения табличных данных. Рассмотрим пример создания таблицы:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TableExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Пример JTable");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String[][] data = {
{"1", "Иван", "25"},
{"2", "Мария", "30"},
{"3", "Петр", "28"}
};
String[] columnNames = {"ID", "Имя", "Возраст"};
JTable table = new JTable(data, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane);
frame.setVisible(true);
}
}
Результат выполнения
Откроется окно с таблицей, содержащей данные о трех людях.
Использование JTree
JTree
используется для отображения иерархических данных. Пример создания дерева:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class TreeExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Пример JTree");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Фрукты");
DefaultMutableTreeNode apple = new DefaultMutableTreeNode("Яблоки");
DefaultMutableTreeNode banana = new DefaultMutableTreeNode("Бананы");
DefaultMutableTreeNode orange = new DefaultMutableTreeNode("Апельсины");
root.add(apple);
root.add(banana);
root.add(orange);
JTree tree = new JTree(root);
JScrollPane scrollPane = new JScrollPane(tree);
frame.add(scrollPane);
frame.setVisible(true);
}
}
Результат выполнения
Откроется окно с деревом, представляющим иерархию фруктов.
Упражнения
Упражнение 1: Создание таблицы с добавлением данных
Напишите программу, которая создает окно с таблицей и кнопкой "Добавить". При нажатии на кнопку в таблицу должна добавляться новая строка с данными по умолчанию.
Решение:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AddRowTableExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Таблица с добавлением данных");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String[] columnNames = {"ID", "Имя", "Возраст"};
DefaultTableModel model = new DefaultTableModel(columnNames, 0);
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
JPanel panel = new JPanel();
JButton addButton = new JButton("Добавить");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new Object[]{"4", "Новый", "20"});
}
});
panel.add(addButton);
frame.add(scrollPane, "Center");
frame.add(panel, "South");
frame.setVisible(true);
}
}
Объяснение: Программа создает окно с таблицей и кнопкой "Добавить". При нажатии на кнопку в таблицу добавляется новая строка с данными по умолчанию.
Упражнение 2: Создание дерева с добавлением узлов
Напишите программу, которая создает окно с деревом и кнопкой "Добавить узел". При нажатии на кнопку в дерево должен добавляться новый узел с именем "Новый узел".
Решение:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AddNodeTreeExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Дерево с добавлением узлов");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Фрукты");
DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);
JScrollPane scrollPane = new JScrollPane(tree);
JPanel panel = new JPanel();
JButton addButton = new JButton("Добавить узел");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Новый узел");
root.add(newNode);
model.reload();
}
});
panel.add(addButton);
frame.add(scrollPane, "Center");
frame.add(panel, "South");
frame.setVisible(true);
}
}
Объяснение: Программа создает окно с деревом и кнопкой "Добавить узел". При нажатии на кнопку в дерево добавляется новый узел с именем "Новый узел".