簡體   English   中英

我可以將RowFilter與JTable一起使用來過濾大於或小於double類型的列嗎?

[英]Can I use RowFilter with a JTable to filter greater than or less than a column with type double?

我有一個包含一些數據的JTable ,列如下:

  • 市場-字符串
  • 貨幣-字符串
  • 音量-雙倍
  • 高-雙人
  • 低-雙

我每個都有一個文本字段,當您單擊按鈕時,它應該過濾表格。 我使用以下方法使用市場和貨幣字符串:

RowFilter.regexFilter(txtMarket.getText(), 0);
RowFilter.regexFilter(txtCurrency.getText(), 1);

我想使用類似的東西來過濾大於或小於音量的高低。 這可能還是我應該嘗試其他方法?

抱歉,這是我第一次問任何有關缺少信息或格式問題的問題。

在這里,您可以找到有關大於行過濾器的信息https://docs.oracle.com/javase/7/docs/api/javax/swing/RowFilter.html此示例向您展示如何使用整數。

例:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;   
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

public class example extends JPanel {
    private String[] columnNames = { "Volume"
    };

    private Object[][] data = { {new Integer(5)},
            {new Integer(1)},
            {new Integer(2)},
            {new Integer(3)},
            {new Integer(5)},
            {new Integer(5)},
            {new Integer(7)} };

    private DefaultTableModel myModel = new DefaultTableModel(data, columnNames);
    private JTable table = new JTable(myModel);
    private JScrollPane scrollPane = new JScrollPane(table);
    private TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(myModel);
    private JButton button;
    private JButton button2;
    private JTextField filterText;



    RowFilter<DefaultTableModel, Integer> GreaterThan = new RowFilter<DefaultTableModel, Integer>() {
        public boolean include(Entry<? extends DefaultTableModel, ? extends Integer> entry) {
            myModel = entry.getModel();

            //0 is the first column
            if ((int) table.getValueAt(entry.getIdentifier(), 0) > Integer.parseInt(filterText.getText())) {
                return true;
            }
            return false;
        }
    };

    RowFilter<DefaultTableModel, Integer> LessThan = new RowFilter<DefaultTableModel, Integer>() {
        public boolean include(Entry<? extends DefaultTableModel, ? extends Integer> entry) {
            myModel = entry.getModel();

            //0 is the first column
            if ((int) table.getValueAt(entry.getIdentifier(), 0) < Integer.parseInt(filterText.getText())) {
                return true;
            }
            return false;
        }
    };


    public example() {
        filterText = new JTextField();
        button = new JButton("Click to sort Greater Than");
        button2 = new JButton("Click to sort Less Than");
        add(button);
        add(button2);
        add(scrollPane);
        table.setRowSorter(sorter);

        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                sorter.setRowFilter(GreaterThan);
            }
        });

        button2.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                sorter.setRowFilter(LessThan);
            }
        });


    }
}

我使用以下方法使用市場和貨幣字符串:

然后查看RowFilter API:

  1. 您可以使用RowFilter.numberFilter(...)方法創建兩個過濾器,一個用於“大於”,另一個用於“小於”。
  2. 然后,您可以使用上面的兩個過濾器,並使用RowFilter.and(...)方法創建可以在表上使用的過濾器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM