Java: два фильтрующих вопроса - PullRequest
0 голосов
/ 16 июня 2020

Следующий образец фильтра, который я обнаружил, отлично работает.

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 ();
   }
}

При выполнении он генерирует следующее:

enter image description here

Если При вводе "Ja" получается следующее:

enter image description here

Вопрос 1: Как найти внутри объект, который Фильтр "Ja"? Даже при работе в среде IDE и в точке останова мне не удалось определить, где хранится эта информация.

При попытке найти («Зарплата> 10000») не было найдено никаких данных.

enter image description here

Вопрос 1: Как я могу отфильтровать по определенному полю c и как определить, Фильтр в таблице есть по одному полю или по всем полям, как в первом примере?

1 Ответ

0 голосов
/ 16 июня 2020

Чтобы ответить Вопрос 1 : Если вы посмотрите на предоставленный вами код, вы увидите, что при нажатии кнопки Filter введенные данные будут сохранены в String с именем text.

Если вы добавите system.out.println(text); после того, как текст был установлен, вы увидите свой ввод.

... // 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 : При попытке отфильтровать salary > 10000, вы фильтруете именно это. Вы ищете "salary > 10000", а не salary, то есть >, чем 10000. Для этого вам нужно изменить код, в котором применяется фильтр.

Изменить: Чтобы получить текстовую информацию из класса, вы можете инициализировать FilterExample в своем основном методе, как: FilterExample filter = new FilterExample();. Это позволяет нам вызывать методы из класса, где мы можем инициировать метод для возврата частной переменной из класса (которую мы установим на вход). Затем всякий раз, когда нажимается кнопка, строка будет сохраняться в этой частной переменной, к которой мы можем получить доступ, например: String text = filter.getText();. Поскольку ваш фильтр обновляется только после нажатия кнопки, вам нужно выяснить, когда получить доступ к getText(), и, если вы не инициализируете его, он останется null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...