java,gui,如何设置两个表格下拉菜单栏筛选器
时间: 2024-05-09 21:16:09 浏览: 20
在Java GUI中,可以使用JComboBox组件作为下拉菜单栏,并使用RowFilter类来实现表格的筛选器。以下是一个简单的示例代码:
```java
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.util.ArrayList;
public class TableFilterExample extends JFrame {
private JTable table1;
private JTable table2;
public TableFilterExample() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
// 创建表格数据
String[] columns = {"Name", "Age"};
Object[][] data = {{"John", 30}, {"Jane", 25}, {"Bob", 35}, {"Alice", 27}};
DefaultTableModel model1 = new DefaultTableModel(data, columns);
DefaultTableModel model2 = new DefaultTableModel(data, columns);
// 创建表格并设置数据模型
table1 = new JTable(model1);
table2 = new JTable(model2);
// 创建下拉菜单栏
JComboBox<String> comboBox1 = new JComboBox<>(columns);
JComboBox<String> comboBox2 = new JComboBox<>(columns);
// 创建表格排序器
TableRowSorter<DefaultTableModel> sorter1 = new TableRowSorter<>(model1);
TableRowSorter<DefaultTableModel> sorter2 = new TableRowSorter<>(model2);
table1.setRowSorter(sorter1);
table2.setRowSorter(sorter2);
// 设置下拉菜单栏的监听器,当选择不同的选项时,更新表格的筛选器
comboBox1.addActionListener(e -> {
String selectedColumn = comboBox1.getSelectedItem().toString();
ArrayList<RowFilter<Object, Object>> filters = new ArrayList<>();
filters.add(RowFilter.notFilter(RowFilter.regexFilter("^$")));
filters.add(RowFilter.regexFilter("(?i)" + selectedColumn));
sorter1.setRowFilter(RowFilter.andFilter(filters));
});
comboBox2.addActionListener(e -> {
String selectedColumn = comboBox2.getSelectedItem().toString();
ArrayList<RowFilter<Object, Object>> filters = new ArrayList<>();
filters.add(RowFilter.notFilter(RowFilter.regexFilter("^$")));
filters.add(RowFilter.regexFilter("(?i)" + selectedColumn));
sorter2.setRowFilter(RowFilter.andFilter(filters));
});
// 创建面板并将表格和下拉菜单栏添加到面板中
JPanel panel = new JPanel(new GridLayout(2, 2));
panel.add(new JScrollPane(table1));
panel.add(comboBox1);
panel.add(new JScrollPane(table2));
panel.add(comboBox2);
add(panel);
setVisible(true);
}
public static void main(String[] args) {
new TableFilterExample();
}
}
```
在上面的示例中,我们创建了两个表格和两个下拉菜单栏,每个下拉菜单栏都包含表格中的列名。当选择不同的列名时,我们使用RowFilter类创建一个筛选器,并将其应用于相应的表格的排序器中。这样,选择下拉菜单栏中的选项将筛选出具有所选列的值的行,并将其显示在表格中。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)