上一篇
在Java中,使用Swing组件创建文本框(JTextField)和表格(JTable),通过JFrame容器布局,结合JScrollPane实现滚动表格,监听事件处理用户输入,实现数据交互展示功能。
在Java中创建文本框和表格主要依赖Swing库(javax.swing),以下是详细实现方法及完整代码示例,所有代码均基于Java标准库,无需额外依赖。
文本框(JTextField)实现
文本框用于接收用户输入的文本,核心类是JTextField。
基础步骤:
- 创建
JFrame窗口作为容器 - 初始化
JTextField并设置属性 - 添加文本框到窗口
- 添加事件监听(如回车提交)
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TextFieldExample {
public static void main(String[] args) {
// 1. 创建窗口
JFrame frame = new JFrame("文本框示例");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new java.awt.FlowLayout());
// 2. 创建文本框
JTextField textField = new JTextField(20); // 20列宽度
textField.setToolTipText("请输入内容"); // 悬停提示
// 3. 添加回车事件监听
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "输入内容: " + textField.getText());
}
});
// 4. 添加组件到窗口
frame.add(new JLabel("输入文本:"));
frame.add(textField);
frame.setVisible(true); // 显示窗口
}
}
关键特性:

setColumns(int):设置文本框可见宽度getText():获取输入内容setEditable(false):设为只读模式- 事件监听:支持
ActionListener(回车触发)或DocumentListener(实时监听输入变化)
表格(JTable)实现
表格通过JTable类展示数据,需配合TableModel管理数据。
基础步骤:
- 定义表格数据模型(使用
DefaultTableModel) - 创建
JTable并绑定模型 - 将表格放入滚动面板(
JScrollPane) - 添加面板到窗口
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TableExample {
public static void main(String[] args) {
JFrame frame = new JFrame("表格示例");
frame.setSize(500, 300);
// 1. 创建表格模型(指定列名和初始数据)
String[] columns = {"姓名", "年龄", "职业"};
Object[][] data = {
{"张三", 25, "工程师"},
{"李四", 30, "设计师"},
{"王五", 28, "产品经理"}
};
DefaultTableModel model = new DefaultTableModel(data, columns);
// 2. 创建表格并绑定模型
JTable table = new JTable(model);
table.setFillsViewportHeight(true); // 填充视图高度
// 3. 添加表格到滚动面板(支持大数据量滚动)
JScrollPane scrollPane = new JScrollPane(table);
// 4. 添加组件到窗口
frame.add(scrollPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
关键操作:

-
增删数据:
// 添加行 model.addRow(new Object[]{"赵六", 35, "总监"}); // 删除选中行 int selectedRow = table.getSelectedRow(); if (selectedRow >= 0) { model.removeRow(selectedRow); } -
自定义渲染:继承
DefaultTableCellRenderer修改单元格样式 -
排序:调用
table.setAutoCreateRowSorter(true)启用列排序
文本框与表格联动示例
实现输入文本框内容实时过滤表格数据:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class FilterTableExample {
public static void main(String[] args) {
JFrame frame = new JFrame("表格过滤示例");
frame.setLayout(new BorderLayout());
// 1. 创建表格
DefaultTableModel model = new DefaultTableModel(
new Object[][]{{"Apple", "水果"}, {"Carrot", "蔬菜"}, {"Beef", "肉类"}},
new String[]{"名称", "类型"}
);
JTable table = new JTable(model);
TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<>(model);
table.setRowSorter(sorter);
// 2. 创建过滤文本框
JTextField filterField = new JTextField(20);
filterField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) { filter(); }
@Override
public void removeUpdate(DocumentEvent e) { filter(); }
@Override
public void changedUpdate(DocumentEvent e) { filter(); }
private void filter() {
String text = filterField.getText();
if (text.trim().isEmpty()) {
sorter.setRowFilter(null);
} else {
// 按第一列(名称)过滤
sorter.setRowFilter(RowFilter.regexFilter("(?i)" + text, 0));
}
}
});
// 3. 布局组件
JPanel panel = new JPanel();
panel.add(new JLabel("输入过滤:"));
panel.add(filterField);
frame.add(panel, BorderLayout.NORTH);
frame.add(new JScrollPane(table), BorderLayout.CENTER);
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
最佳实践与注意事项
- 线程安全:
- Swing组件必须在事件调度线程(EDT)中操作:
SwingUtilities.invokeLater(() -> new TextFieldExample());
- Swing组件必须在事件调度线程(EDT)中操作:
- 性能优化:
- 大数据表格使用
TableModel分批加载数据 - 避免频繁更新模型,批量操作后调用
fireTableDataChanged()
- 大数据表格使用
- 可访问性:
- 为组件设置
setToolTipText()提升用户体验 - 使用
JLabel关联文本框(setLabelFor())
- 为组件设置
引用说明
本文代码基于Java官方Swing教程,遵循Oracle Java SE规范,关键参考:
- Oracle官方文档:How to Use Text Fields
- Oracle官方文档:How to Use Tables
- 事件模型设计参考《Java Swing, 2nd Edition》(O’Reilly)
所有示例均通过JDK 11+测试,兼容主流操作系统,建议开发者使用IDE(如IntelliJ IDEA/Eclipse)调试运行。
