14.64.2 表查询 Filter table by the text in a TextField

本示例展示了一个使用Java Swing创建的简单应用程序,该程序通过正则表达式来过滤JTable中的数据。用户可以在文本框中输入字符串,点击按钮后,表格会根据正则表达式动态显示符合条件的数据。

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.RowFilter; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; public class RegexTable { public static void main(String[] args) { JFrame frame = new JFrame("Regexing JTable"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Object rows[][] = { { "A", "About", 44.36 }, { "B", "Boy", 44.84 }, { "C", "Cat", 463.63 }, { "D", "Day", 27.14 }, { "E", "Eat", 44.57 }, { "F", "Fail", 23.15 }, { "G", "好", 4.40 }, { "H", "Hot", 24.96 }, { "I", "Ivey", 5.45 }, { "J", "Jack", 49.54 }, { "K", "Kids", 280.00 } }; String columns[] = { "符号", "名字", "价格" }; TableModel model = new DefaultTableModel(rows, columns) { public Class getColumnClass(int column) { Class returnValue; if ((column >= 0) && (column < getColumnCount())) { returnValue = getValueAt(0, column).getClass(); } else { returnValue = Object.class; } return returnValue; } }; final JTable table = new JTable(model); final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); table.setRowSorter(sorter);//设置为sorter此方法清除该选择并重置所有可变行高度。 JScrollPane pane = new JScrollPane(table); frame.add(pane, BorderLayout.CENTER); JPanel panel = new JPanel(new BorderLayout()); JLabel label = new JLabel("过滤"); panel.add(label, BorderLayout.WEST); final JTextField filterText = new JTextField("A"); panel.add(filterText, BorderLayout.CENTER); frame.add(panel, BorderLayout.NORTH); JButton button = new JButton("过滤"); button.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String text = filterText.getText();//从文本框里得到的值给text if(text.length() == 0){//如果没有数据 //setRowFilter()设置用于确定哪些行(如果有)应该在视图中隐藏的过滤器。过滤器在排序之前应用。 sorter.setRowFilter(null);//过滤为空,即显示所有行数据 }else{ sorter.setRowFilter(RowFilter.regexFilter(text)); /** * 1.RowFilter 用于从模型中过滤条目,使得这些条目不会在视图中显示。 * 2.regexFilter返回一个 RowFilter,它使用正则表达式确定要包含哪些条目。 * 3.只包含至少有一个匹配值的条目,这里包含了text这个条目 */ } } }); frame.add(button, BorderLayout.SOUTH); frame.setSize(300, 250); frame.setVisible(true); } }


### `textField.setAlignment(TextField.RIGHT)` 的作用及相关知识 `textField.setAlignment(TextField.RIGHT)` 用于设置 `TextField` 中文本的对齐方式为右对齐。`TextField` 是 `java.awt` 包下用于接收单行文本输入的组件,`setAlignment` 方法允许开发者控制文本在 `TextField` 中的显示位置。除了 `TextField.RIGHT`,还可以使用 `TextField.LEFT`(左对齐,默认值)和 `TextField.CENTER`(居中对齐)。 示例代码如下: ```java import java.awt.Frame; import java.awt.TextField; public class TextFieldAlignmentExample { public static void main(String[] args) { Frame frame = new Frame("TextField Alignment Example"); TextField textField = new TextField("This is a sample text"); textField.setAlignment(TextField.RIGHT); frame.add(textField); frame.setSize(300, 200); frame.setVisible(true); } } ``` ### `add(textField, BorderLayout.NORTH)` 的作用及相关知识 `add(textField, BorderLayout.NORTH)` 通常用于将 `TextField` 组件添加到使用 `BorderLayout` 布局管理器的容器中,并将其放置在容器的北部(顶部)位置。`BorderLayout` 是 `java.awt` 包中常用的布局管理器之一,它将容器划分为五个区域:北(`NORTH`)、南(`SOUTH`)、东(`EAST`)、西(`WEST`)和中(`CENTER`)。当向使用 `BorderLayout` 的容器添加组件时,需要指定组件放置的区域。 示例代码如下: ```java import java.awt.BorderLayout; import java.awt.Frame; import java.awt.TextField; public class BorderLayoutExample { public static void main(String[] args) { Frame frame = new Frame("BorderLayout Example"); frame.setLayout(new BorderLayout()); TextField textField = new TextField("This is a text field"); frame.add(textField, BorderLayout.NORTH); frame.setSize(300, 200); frame.setVisible(true); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值