java,gui,现在弹窗中有一个表格,两个下拉菜单栏。通过下拉菜单栏可以实现筛选表格的功能。可以分别筛选,也可以两个菜单栏一起筛选,呈现
时间: 2023-08-12 17:06:28 浏览: 115
您可以通过以下步骤实现这个功能:
1. 创建一个 JFrame 窗口,将表格和两个下拉菜单栏添加到其中。
2. 为下拉菜单栏添加 ItemListener 监听器。当选择一个选项时,获取该选项的值,并使用该值筛选表格。
3. 创建一个 TableModel,该模型包含所有数据。当在下拉菜单栏中选择一个选项时,根据选择的值更新 TableModel。
4. 在 JFrame 上添加一个按钮,用于启动筛选功能。当用户单击按钮时,获取下拉菜单栏的值,并使用该值更新表格。
5. 使用 RowSorter 对表格进行排序。RowSorter 可以按照指定的列和顺序对表格进行排序。
6. 通过调用 JFrame 的 setVisible() 方法将窗口设置为可见状态,以便用户可以与其进行交互。
下面是一个简单的示例代码,用于演示如何实现这个功能:
```java
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TableFilterExample extends JFrame {
private JComboBox<String> comboBox1, comboBox2;
private JTable table;
private DefaultTableModel tableModel;
private TableRowSorter<TableModel> sorter;
public TableFilterExample() {
// 设置窗口标题和大小
super("Table Filter Example");
setSize(600, 400);
// 创建表格和数据模型
tableModel = new DefaultTableModel(getData(), getColumnNames());
table = new JTable(tableModel);
// 创建下拉菜单栏,并添加监听器
comboBox1 = new JComboBox<>(getColumnNames());
comboBox1.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
updateTableModel();
}
});
comboBox2 = new JComboBox<>(getColumnNames());
comboBox2.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
updateTableModel();
}
});
// 创建筛选按钮,并添加监听器
JButton filterButton = new JButton("Filter");
filterButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateTableModel();
}
});
// 将表格和下拉菜单栏添加到窗口中
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JScrollPane(table), BorderLayout.CENTER);
JPanel filterPanel = new JPanel();
filterPanel.add(comboBox1);
filterPanel.add(comboBox2);
filterPanel.add(filterButton);
panel.add(filterPanel, BorderLayout.NORTH);
add(panel);
// 创建 TableRowSorter,并将其绑定到表格上
sorter = new TableRowSorter<>(tableModel);
table.setRowSorter(sorter);
// 设置窗口可见
setVisible(true);
}
// 获取表格的列名
private String[] getColumnNames() {
return new String[]{"Name", "Age", "Gender", "City"};
}
// 获取表格的数据
private Object[][] getData() {
return new Object[][]{
{"Tom", 20, "Male", "New York"},
{"Mary", 25, "Female", "Los Angeles"},
{"John", 30, "Male", "Chicago"},
{"Lisa", 35, "Female", "Houston"},
{"David", 40, "Male", "Philadelphia"},
{"Sarah", 45, "Female", "Phoenix"},
{"Robert", 50, "Male", "San Antonio"}
};
}
// 更新表格数据模型
private void updateTableModel() {
List<RowFilter<TableModel, Object>> filters = new ArrayList<>();
// 获取第一个下拉菜单栏的值,并根据其筛选
String filter1 = (String) comboBox1.getSelectedItem();
if (!filter1.equals("None")) {
filters.add(RowFilter.regexFilter(filter1, getColumnIndex(filter1)));
}
// 获取第二个下拉菜单栏的值,并根据其筛选
String filter2 = (String) comboBox2.getSelectedItem();
if (!filter2.equals("None")) {
filters.add(RowFilter.regexFilter(filter2, getColumnIndex(filter2)));
}
// 如果没有选择任何筛选条件,则显示所有数据
if (filters.isEmpty()) {
sorter.setRowFilter(null);
} else {
RowFilter<TableModel, Object> filter = RowFilter.andFilter(filters);
sorter.setRowFilter(filter);
}
}
// 获取指定列的索引
private int getColumnIndex(String columnName) {
return Arrays.asList(getColumnNames()).indexOf(columnName);
}
public static void main(String[] args) {
new TableFilterExample();
}
}
```
该示例代码创建了一个包含表格和两个下拉菜单栏的窗口。用户可以通过选择下拉菜单栏中的选项来筛选表格。单击“Filter”按钮将启动筛选功能,即获取下拉菜单栏的值并使用其更新表格。使用 TableRowSorter 对表格进行排序,使用户可以轻松地在筛选后查看所需的数据。
阅读全文