Java:两个过滤问题
我发现下面的过滤器示例非常有效Java:两个过滤问题,java,filter,Java,Filter,我发现下面的过滤器示例非常有效 import java.awt.*; import java.awt.event.*; import java.util.regex.*; import javax.swing.*; import javax.swing.table.*; public class FilterExample extends JFrame { private JTable table; private TableModel model; public Fil
import java.awt.*;
import java.awt.event.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.table.*;
public class FilterExample extends JFrame
{
private JTable table;
private TableModel model;
public FilterExample ()
{
setTitle("FilterTable Test");
Object rows[][] = {{"Adithya", "Content Developer", 25000}, {"Jai", "SME", 30000}, {"Chaitanya", "Java Engineer", 45000}, {"Ramesh", "Scala Developer", 40000}, {"Ravi", "SAP Consultant", 70000}};
Object columns[] = {"Name", "Designation", "Salary"};
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;
}
};
table = new JTable(model);
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
add(new JScrollPane(table), BorderLayout.CENTER);
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Filter");
panel.add(label, BorderLayout.WEST);
final JTextField filterText = new JTextField("");
panel.add(filterText, BorderLayout.CENTER);
add(panel, BorderLayout.NORTH);
JButton button = new JButton("Filter");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = filterText.getText();
if(text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(RowFilter.regexFilter(text));
} catch(PatternSyntaxException pse) {
System.out.println("Bad regex pattern");
}
}
}
});
add(button, BorderLayout.SOUTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
new FilterExample ();
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.regex.*;
导入javax.swing.*;
导入javax.swing.table.*;
公共类筛选器示例扩展JFrame
{
专用JTable表;
私有表模型;
公共筛选器示例()
{
setTitle(“过滤器测试”);
对象行[][]={{“Adithya”,“Content Developer”,25000},{“Jai”,“SME”,30000},{“Chaitanya”,“Java工程师”,45000},{“Ramesh”,“Scala Developer”,40000},{“Ravi”,“SAP顾问”,70000};
对象列[]={“名称”、“指定”、“薪资”};
模型=新的DefaultTableModel(行、列){
公共类getColumnClass(int列){
阶级价值;
如果((列>=0)和(&(列
执行时,它会生成以下内容:
如果输入“Ja”,则产生以下结果:
问题1:
如何在对象中找到过滤器为“Ja”?
即使在IDE和断点内运行,我也无法找到此信息的存储位置
当试图查找一个“薪水>10000”时,它将找不到任何数据
问题1:
如何对特定字段进行筛选,以及如何判断表上的筛选是在单个字段上还是在所有字段上,如第一个示例中所示?回答问题1:如果查看您提供的代码,您将看到,当您按下
筛选
按钮时,输入将存储在一个字符串中文本
如果添加system.out.println(文本)代码>设置文本后,您将看到您的输入
... // more code
JButton button = new JButton("Filter");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = filterText.getText(); // The variable your input is stored to
System.out.println(text);
... // More code
回答问题2:当您尝试筛选薪资>10000
时,您正在筛选一个正好如此的薪资。您查找的是“工资>10000”
,而不是工资
,即
低于10000
。要做到这一点,您必须修改应用过滤器的代码
编辑:要从类中检索文本信息,您可以在主方法中初始化FilterExample
:FilterExample filter=new FilterExample()代码>。这允许我们从类中调用方法,在类中我们可以初始化一个方法以从类中返回一个私有变量(我们将设置为输入)。然后,每当按下按钮时,字符串都将存储在这个私有变量中,我们可以使用它进行访问,例如:string text=filter.getText()代码>。由于过滤器只在按下按钮后更新,因此您必须确定何时访问getText()
,如果不初始化它,问题1的过滤器将保持null
,我希望从JTable对象中提取该值,因为我以后需要它。另外,如果将JTable传递给另一个例程,该例程可能需要找到该值。@UnhandledException您的意思是要检索主函数中的变量?我想更好的问题是JTable中存储的筛选信息在哪里,以及如何从JTable对象本身检索。@UnhandledException,在打印text
的同一位置,您可以创建一个私有类变量,例如private String classText
,然后创建一个名为getText()
的方法,该方法将返回classText
。但是,您还需要初始化FilterExample(),这可能不是您的目标?不,主要目标是定位信息在JTable、Sorter或任何类中的实际存储位置。