在JTable中搜索-未获得正确的输出

直觉

我在JTable中搜索时遇到问题。我在Stack Overflow上找到了一个方法,但是它似乎没有用。当我现在搜索时,我什么也没得到。

老实说,我对reg不太满意。表达式。

相关代码在我的searchTF键侦听器中,但我也想向您展示其余内容,以便您可以了解我要做什么。

我需要能够在我的JTable中进行搜索。

在jTable中实现搜索文本字段

这是我尝试实现的代码。我可能忘记了一些东西。

package gui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.SwingConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import domains.Member;
import mappers.MemberMapper;

public class ShowMembersGUI {
    private JFrame showMembersFrame;
    private JButton editMemberBtn, closeBtn, removeMemberBtn;
    private JTable table;
    private JScrollPane scrollPane;
    private JPanel p;
    private Object id, fName, lName;
    private int index;
    private final MyTableModel myTableModel;
    private JTextField searchTF;
    private JLabel searchLbl;

    public ShowMembersGUI() {
        MemberMapper mMapper = new MemberMapper();
        List<Member> data = mMapper.selectAllMembers();
        myTableModel = new MyTableModel(data);

        table = new JTable(myTableModel);
        final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(
                myTableModel);

        scrollPane = new JScrollPane(table);
        table.setFillsViewportHeight(true);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setRowSorter(sorter);

        searchLbl = new JLabel("Søg");
        searchTF = new JTextField(10);
        searchTF.addKeyListener(new KeyListener() {

            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {

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

                                private void searchFieldChangedUpdate(
                                        DocumentEvent evt) {
                                    String text = searchTF.getText();
                                    if (text.length() == 0) {
                                        sorter.setRowFilter(null);
                                        table.clearSelection();
                                    } else {
                                        try {
                                            sorter.setRowFilter(RowFilter
                                                    .regexFilter("(?i)" + text,
                                                            4));
                                            table.clearSelection();

                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        }
                                    }
                                }

                                @Override
                                public void insertUpdate(DocumentEvent evt) {
                                    searchFieldChangedUpdate(evt);
                                }

                                @Override
                                public void removeUpdate(DocumentEvent evt) {
                                    searchFieldChangedUpdate(evt);
                                }

                                @Override
                                public void changedUpdate(DocumentEvent evt) {
                                    searchFieldChangedUpdate(evt);
                                }
                            });
                }
            }

            @Override
            public void keyReleased(KeyEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void keyTyped(KeyEvent arg0) {
                // TODO Auto-generated method stub
            }
        });

        editMemberBtn = new JButton("Rediger Medlem");
        editMemberBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                EditMemberGUI editMemberGUI = new EditMemberGUI(
                        ShowMembersGUI.this);
                int row = table.getSelectedRow();
                // int column = table.getSelectedColumn();
                id = (Object) table.getValueAt(row, 0);
                Object fName = (Object) table.getValueAt(row, 1);
                Object lName = (Object) table.getValueAt(row, 2);
                Object address = (Object) table.getValueAt(row, 3);
                Object zipCode = (Object) table.getValueAt(row, 4);
                Object city = (Object) table.getValueAt(row, 5);
                Object email = (Object) table.getValueAt(row, 6);
                Object phoneNo = (Object) table.getValueAt(row, 7);

                index = (Integer) id;
                editMemberGUI.getfNameTF().setText(fName.toString());
                editMemberGUI.getlNameTF().setText(lName.toString());
                editMemberGUI.getAddressTF().setText(address.toString());
                editMemberGUI.getZipCodeTF().setText(zipCode.toString());
                editMemberGUI.getCityTF().setText(city.toString());
                editMemberGUI.getEmailTF().setText(email.toString());
                editMemberGUI.getPhoneNoTF().setText(phoneNo.toString());
                editMemberGUI.showGUI();

            }
        });

        removeMemberBtn = new JButton("Fjern Medlem");
        removeMemberBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int row = table.getSelectedRow();
                // int column = table.getSelectedColumn();
                id = (Object) table.getValueAt(row, 0);
                fName = (Object) table.getValueAt(row, 1);
                lName = (Object) table.getValueAt(row, 2);

                Object[] options = { "Ja", "Nej" };
                int n = JOptionPane
                        .showOptionDialog(null,
                                "Er du sikker du vil slette medlem?\n\n"
                                        + "Medlemsnr: " + id + "\n\n" + fName
                                        + " " + lName, "Advarsel",
                                JOptionPane.YES_NO_OPTION,
                                JOptionPane.QUESTION_MESSAGE, null, options,
                                options[0]);

                if (n == JOptionPane.YES_OPTION) {
                    MemberMapper mMapper = new MemberMapper();
                    int i = (Integer) id;
                    mMapper.removeMember(i);
                    myTableModel.removeMemberFromTable(row);
                    myTableModel.fireTableDataChanged();
                } else {
                }

            }
        });

        closeBtn = new JButton("Close");
        closeBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                showMembersFrame.setVisible(false);
            }
        });

        p = new JPanel(new FlowLayout());

        JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JPanel p2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));

        p1.add(searchLbl);
        p1.add(searchTF);
        p2.add(editMemberBtn);
        p2.add(removeMemberBtn);
        p2.add(closeBtn);

        p.add(p1);
        p.add(p2);

    }

    public void showGUI() {
        showMembersFrame = new JFrame();
        showMembersFrame.setTitle("Vis Medlemmer");
        showMembersFrame.setLayout(new BorderLayout());
        showMembersFrame.setSize(1000, 600);

        showMembersFrame.add(scrollPane, BorderLayout.CENTER);
        showMembersFrame.add(p, BorderLayout.SOUTH);
        // showMembersFrame.pack();
        showMembersFrame.setVisible(true);
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public JTable getTable() {
        return table;
    }

    public void setTable(JTable table) {
        this.table = table;
    }

}

class MyTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;
    private List<Member> members = new ArrayList<Member>();

    public MyTableModel(List<Member> members) {
        this.members = members;
    }

    public void addMember(Member m) {
        members.add(m);
        int row = members.size() - 1;
        fireTableRowsInserted(row, row);
    }

    public void removeMemberFromTable(int row) {
        members.remove(row);
        fireTableRowsDeleted(row, row);
    }

    public void tableUpdate(int row, Member m) {
        if (row >= 0 && row < members.size()) {
            members.set(row, m);
            fireTableRowsUpdated(row, row);
        }
    }

    public List<Member> getMembers() {
        return new ArrayList<Member>(members);
    }

    @Override
    public int getColumnCount() {
        return 8;
    }

    @Override
    public int getRowCount() {
        return members.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Member m = members.get(rowIndex);

        switch (columnIndex) {
        case 0:
            return m.getMemberId();

        case 1:
            return m.getfName();

        case 2:
            return m.getlName();

        case 3:
            return m.getAddress();

        case 4:
            return m.getZipCode();

        case 5:
            return m.getCity();

        case 6:
            return m.getEmail();

        case 7:
            return m.getPhoneNo();

        default:
            return "";
        }
    }

    public String getColumnName(int column) {
        switch (column) {
        case 0:
            return "MedlemsID";

        case 1:
            return "Fornavn";

        case 2:
            return "Efternavn";

        case 3:
            return "Adresse";

        case 4:
            return "Postnummer";

        case 5:
            return "By";

        case 6:
            return "Email";

        case 7:
            return "Telefonnr";
        default:
            return "";
        }
    }

    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
        case 0:
            return String.class;

        case 1:
            return String.class;

        case 2:
            return String.class;

        case 3:
            return String.class;

        case 4:
            return String.class;

        case 5:
            return String.class;

        case 6:
            return String.class;

        case 7:
            return String.class;

        default:
            return String.class;
        }
    }
}
alex2410

下一个糟糕的设计代码中的问题:

  searchTF.addKeyListener(new KeyListener() {

        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {

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

                            private void searchFieldChangedUpdate(
                                    DocumentEvent evt) {
                                String text = searchTF.getText();
                                if (text.length() == 0) {
                                    sorter.setRowFilter(null);
                                } else {
                                    try {
                                        sorter.setRowFilter(RowFilter.regexFilter("(?i)" + text,4));
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                                }
                            }

                            @Override
                            public void insertUpdate(DocumentEvent evt) {
                                searchFieldChangedUpdate(evt);
                            }

                            @Override
                            public void removeUpdate(DocumentEvent evt) {
                                searchFieldChangedUpdate(evt);
                            }

                            @Override
                            public void changedUpdate(DocumentEvent evt) {
                                searchFieldChangedUpdate(evt);
                            }
                        });
            }
        }

        @Override
        public void keyReleased(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyTyped(KeyEvent arg0) {
            // TODO Auto-generated method stub
        }
    });

首先,使用@mKorbel建议的DocumentListener而不是KeyListener

第二,正如我所见,您只需要在ENTER按下搜索时使用search ,因此可以使用keyBindings

并且,searchTF.getDocument().addDocumentListener(...)您班级中的这段代码DocumentListener向您的字段添加了一个新代码,请在构建字段时执行一次。

根据您的目的使用下一个代码:

    InputMap im = searchTF.getInputMap(JTextField.WHEN_IN_FOCUSED_WINDOW);
    ActionMap am = searchTF.getActionMap();
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "ENTER");
    am.put("ENTER", new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
             String text = searchTF.getText();
             if (text.isEmpty()) {
                 sorter.setRowFilter(null);
             } else {
                 try {
                     sorter.setRowFilter(RowFilter.regexFilter("(?i)" + text, 4));
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
        }
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Yaml模板中未获得正确的输出

来自分类Dev

UISearchController搜索栏未获得焦点

来自分类Dev

youtube搜索未获得网址

来自分类Dev

使用Mongoose的Node.js中的MongoDB聚合未获得正确的结果

来自分类Dev

使用queryProcessInstancesCount方法调用时,Camunda BPM中未获得正确的值

来自分类Dev

RowId在jqGrid中未获得SET

来自分类Dev

编译器未引发任何错误,但在字符出现程序中未获得正确答案

来自分类Dev

Python-点类未获得正确的输出

来自分类Dev

在django搜索中未获得结果,但是单个搜索工作正常

来自分类常见问题

从内部的列表中删除项目-未获得ConcurrentModificationException

来自分类Dev

类中的类的C ++对象未获得公共访问

来自分类Dev

在C中未获得适当的持续时间

来自分类Dev

自适应SVG在Safari中未获得完整宽度

来自分类Dev

ios-cellView中的按钮未获得触摸事件

来自分类Dev

尝试在 firebase 中 signInWithEmailAndPassword 时未获得 customToken

来自分类Dev

在具有预先计算的权重的神经网络分类器中未获得正确的成本函数值。[八度]

来自分类Dev

错误:未获得所需的输出

来自分类Dev

活动未获得正确的捆绑

来自分类Dev

活动未获得正确的捆绑

来自分类Dev

在数组位置移动值时未获得正确的输出

来自分类Dev

“ codeChef INTEST”在解决方案中未获得1行

来自分类Dev

在CONNECT-BY查询中未获得全系列乘法(乘积)

来自分类Dev

在自定义新类中未获得屏幕分辨率

来自分类Dev

在Azure AD身份验证中未获得Upn(唯一的主体名称)

来自分类Dev

调用对象中设置的匿名函数,未获得预期结果

来自分类Dev

在python 3.6.2中未获得高于1.的值的完整浮点除法

来自分类Dev

在Python 3.8.1中读取文本文件时未获得所需结果

来自分类Dev

在测试运行中未获得相同数量的结果

来自分类Dev

在WndProc中未获得Windows 8 WM_POINTER *事件

Related 相关文章

  1. 1

    在Yaml模板中未获得正确的输出

  2. 2

    UISearchController搜索栏未获得焦点

  3. 3

    youtube搜索未获得网址

  4. 4

    使用Mongoose的Node.js中的MongoDB聚合未获得正确的结果

  5. 5

    使用queryProcessInstancesCount方法调用时,Camunda BPM中未获得正确的值

  6. 6

    RowId在jqGrid中未获得SET

  7. 7

    编译器未引发任何错误,但在字符出现程序中未获得正确答案

  8. 8

    Python-点类未获得正确的输出

  9. 9

    在django搜索中未获得结果,但是单个搜索工作正常

  10. 10

    从内部的列表中删除项目-未获得ConcurrentModificationException

  11. 11

    类中的类的C ++对象未获得公共访问

  12. 12

    在C中未获得适当的持续时间

  13. 13

    自适应SVG在Safari中未获得完整宽度

  14. 14

    ios-cellView中的按钮未获得触摸事件

  15. 15

    尝试在 firebase 中 signInWithEmailAndPassword 时未获得 customToken

  16. 16

    在具有预先计算的权重的神经网络分类器中未获得正确的成本函数值。[八度]

  17. 17

    错误:未获得所需的输出

  18. 18

    活动未获得正确的捆绑

  19. 19

    活动未获得正确的捆绑

  20. 20

    在数组位置移动值时未获得正确的输出

  21. 21

    “ codeChef INTEST”在解决方案中未获得1行

  22. 22

    在CONNECT-BY查询中未获得全系列乘法(乘积)

  23. 23

    在自定义新类中未获得屏幕分辨率

  24. 24

    在Azure AD身份验证中未获得Upn(唯一的主体名称)

  25. 25

    调用对象中设置的匿名函数,未获得预期结果

  26. 26

    在python 3.6.2中未获得高于1.的值的完整浮点除法

  27. 27

    在Python 3.8.1中读取文本文件时未获得所需结果

  28. 28

    在测试运行中未获得相同数量的结果

  29. 29

    在WndProc中未获得Windows 8 WM_POINTER *事件

热门标签

归档