在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)调试运行。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/48494.html