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或任何类中的实际存储位置。