如何进行搜索按钮动作事件

问题描述 投票:0回答:1

我有一个搜索栏,当我键入一本书并单击“搜索”时,它会弹出Jlist上,但我不知道如何编写代码。任何指导表示赞赏

public void actionPerformed(ActionEvent e) {
   if (e.getSource() == searchButton) {
       // Action for the SEARCH button
java jbutton jtextfield jlist
1个回答
0
投票

将原始未过滤的数据保留在结构(例如ArrayList)中,并将DocumentListener添加到搜索文本字段中,以便知道搜索文本是否已更改。然后,从removeAllElements()的模型中过滤原始数据和JList。最后,将过滤后的数据添加到JList的模型中。

示例:

public class SearchInJList extends JFrame implements DocumentListener {
    private static final long serialVersionUID = -1662279563193298340L;
    private JList<String> list;
    private List<String> data;
    private DefaultListModel<String> model;
    private JTextField searchField;

    public SearchInJList() {
        super("test");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

        searchField = new JTextField();
        searchField.getDocument().addDocumentListener(this);
        add(searchField, BorderLayout.PAGE_START);

        createData();

        list = new JList<>(model = new DefaultListModel<>());
        data.forEach(model::addElement);
        add(new JScrollPane(list), BorderLayout.CENTER);

        setSize(500, 500);
        setLocationByPlatform(true);
    }

    private void createData() {
        data = new ArrayList<String>();
        for (int i = 0; i < 1000; i++) {
            String s = "String: " + i + ".";
            data.add(s);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            SearchInJList example = new SearchInJList();
            example.setVisible(true);
        });
    }

    @Override
    public void insertUpdate(DocumentEvent e) {
        search();
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        search();
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        search();
    }

    private void search() {
        List<String> filtered = data.stream().filter(s -> s.toLowerCase().contains(searchField.getText().toLowerCase()))
                .collect(Collectors.toList());

        model.removeAllElements();
        filtered.forEach(model::addElement);
    }
}

它不适用于按钮,但是我想这是您可以做的。我的意思是将search()方法添加到按钮的动作监听器中。

© www.soinside.com 2019 - 2024. All rights reserved.