【问题标题】:searching an element in jTable java在jTable java中搜索元素
【发布时间】:2015-05-17 16:30:26
【问题描述】:

所以这里是一个例子是如何做到的

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class TestTableSortFilter extends JPanel {

private String[] columnNames
        = {"Country", "Capital", "Population in Millions", "Democracy"};

private Object[][] data = {
    {"USA", "Washington DC", 280, true},
    {"Canada", "Ottawa", 32, true},
    {"United Kingdom", "London", 60, true},
    {"Germany", "Berlin", 83, true},
    {"France", "Paris", 60, true},
    {"Norway", "Oslo", 4.5, true},
    {"India", "New Delhi", 1046, true}
};

private DefaultTableModel model = new DefaultTableModel(data, columnNames);
private JTable jTable = new JTable(model);

private TableRowSorter<TableModel> rowSorter
        = new TableRowSorter<>(jTable.getModel());

private JTextField jtfFilter = new JTextField();
private JButton jbtFilter = new JButton("Filter");

public TestTableSortFilter() {
    jTable.setRowSorter(rowSorter);

    JPanel panel = new JPanel(new BorderLayout());
    panel.add(new JLabel("Specify a word to match:"),
            BorderLayout.WEST);
    panel.add(jtfFilter, BorderLayout.CENTER);

    setLayout(new BorderLayout());
    add(panel, BorderLayout.SOUTH);
    add(new JScrollPane(jTable), BorderLayout.CENTER);

    jtfFilter.getDocument().addDocumentListener(new DocumentListener(){

        @Override
        public void insertUpdate(DocumentEvent e) {
            String text = jtfFilter.getText();

            if (text.trim().length() == 0) {
                rowSorter.setRowFilter(null);
            } else {
                rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
            }
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            String text = jtfFilter.getText();

            if (text.trim().length() == 0) {
                rowSorter.setRowFilter(null);
            } else {
                rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
            }
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

    });
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable(){
        public void run() {
           JFrame frame = new JFrame("Row Filter");
           frame.add(new TestTableSortFilter());
           frame.pack();
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setLocationRelativeTo(null);
           frame.setVisible(true);
        }

    });
}
}

它工作正常,但问题是当我尝试通过点击这一行获得价值时

((DefaultTableModel) jTableZ.getjTable1().getModel()).getValueAt(row, 36))

它不会返回该程序搜索的行,而是返回的行首先放在 jTable 中,没有搜索。让我尝试解释一下: 当我的 jTable 中有多行并且搜索将其缩小为 1 行时,我将返回旧 jTable 中的第一行,而不是行程序搜索它。如何解决?

我忘了写我的数据不像这里,而是像

private Vector<Vector<String>> data

【问题讨论】:

    标签: jtable rowfilter


    【解决方案1】:

    我已经解决了它而不是 getSelectedRow 我必须将它转换为 rowIndexModel 以获取选定的行

    private int row = jTable1().getSelectedRow();
    private int rowModel=jTable1().convertRowIndexToModel(row);
    

    效果很好:)

    【讨论】:

      【解决方案2】:

      要通过 JTable 进行搜索,请尝试以下操作:

      For(int row=0;row<C.ROWS; row++){
         For(int col=0;col<C.COLS; col++){
           if(table.getValueAt(row, col) == (Object) O){
               System.out.print(Hello); 
            }
         }
      }
      

      根据您是否设置我在此场合使用的对象的 JTable 上每个单元格中的值。

      【讨论】:

      • 当我尝试这样的 somting 时,我的程序崩溃了
      猜你喜欢
      • 2014-03-30
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多