【问题标题】:How can I read and search from file in jTable?如何在 jTable 中读取和搜索文件?
【发布时间】:2017-12-26 11:46:03
【问题描述】:

我想在此代码中执行的操作: 当单击搜索按钮时,它将读取 file 然后将搜索值与 file 中的数据匹配 & 将显示搜索结果为jTable

我面临的问题:如果 GPA 选择 A+,那么它会同时显示 A+、A- 以及当我在给出另一个搜索值后再次按下搜索按钮时,表格只会在其中添加更多数据.

需要的解决方案:我只想读取文件并仅在 jTable 中显示结果,而不是一次又一次地添加结果。搜索按钮应该只在 GPA & Class 列中进行搜索。 & 当 GPA 选择“A/B/C+”或“-”时,搜索结果应该只给出包含该特定 GPA 的数据。

注意:我不想更改搜索选项。

我是 JAVA 的新手。因此,任何形式的帮助将不胜感激! :)

Screenshot of the UI

private void srchBtnActionPerformed(java.awt.event.ActionEvent evt) {                                        

    //file read
    String filepath = "E:\\Netbeans workspace\\modified\\Project\\Info.txt";
    File file = new File(filepath);

    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        model = (DefaultTableModel)jTable1.getModel();

        Object[] tableLines = br.lines().toArray();

        for (int i = 0; i < tableLines.length; i++){
            String line = tableLines[i].toString().trim();
            String[] dataRow = line.split("/");
            model.addRow(dataRow);

        }

    } catch (Exception ex) {
        Logger.getLogger(ReceiverF.class.getName()).log(Level.SEVERE, null, ex);
    }

    //search from file
    String bGroupSrch = (String) jComboBoxBGroup.getSelectedItem();
    if(positiveRBtn.isSelected())
        bGroupSrch = bGroupSrch + "+";
    else if(negativeRBtn.isSelected())
        bGroupSrch = bGroupSrch + "-";

    String areaSrch = (String)jComboBoxArea.getSelectedItem();

    if (bgGroup.getSelection() != null) {

        filter(bGroupSrch);
        filter(areaSrch);
    } else {
        SrchEMsg sem = new SrchEMsg(this);
        sem.setVisible(true);
        sem.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
}

//Filter Method
private void filter(String query){
    TableRowSorter<DefaultTableModel> tr= new TableRowSorter<DefaultTableModel>(model);
    jTable1.setRowSorter(tr);

    tr.setRowFilter(RowFilter.regexFilter(query));
}

【问题讨论】:

    标签: java swing file search jtable


    【解决方案1】:

    该表只是在其中添加了更多数据。

    当您开始搜索时:

    model.setRowCount(0);
    

    清除表的表模型中的数据。

    或者更简单的解决方案是不要一直重新加载数据。相反,您只需更改表使用的过滤器。

    阅读 Sorting and Filtering 上的 Swing 教程部分。每次输入字符时,那里的代码都会替换过滤器。

    当搜索选项更改时,您的代码将更改过滤器。

    【讨论】:

    • 天哪,非常感谢,现在一切正常!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多