gpt4 book ai didi

java - 如何在 JList 中按属性搜索项目

转载 作者:行者123 更新时间:2023-12-02 06:22:34 25 4
gpt4 key购买 nike

我有一个项目类,并将项目存储在 JList 中,我想通过项目名称在 JList 中查找项目。我有一个名为 search 的 JButton,它实现了下一个代码,nameToSearch 变量获取 JTextfield 中写入的字符串,

  ArrayList<Item> backUp = new ArrayList<>();
ArrayList<Item> itemsFound = new ArrayList<>();

for (int i = 0; i < listModel.getSize(); i++) {
backUp.add(listModel.getElementAt(i));

if (listModel.getElementAt(i).getName().compareToIgnoreCase(nameToSearch) >= 0) {
Item foundItem = listModel.getElementAt(i);
itemsFound.add(foundItem);
}
}
//clear the listModel to display the found items
listModel.removeAllElements();
//add the found items to the listModel to be displayed
for (Item s: itemsFound) {
listModel.addElement(s);}

我的意思是获取备份 arrayList 中的所有项目,以便稍后显示所有项目,if 语句检查 item.getName() 是否是用户正在查找的内容,并将该元素添加到 itemfound ArrayList 中,应该在 arrayList 中找到该项目,然后我从 defaultListModel listmodel 中删除所有元素,然后将找到的项目添加到 defaultListModel listModel 中,以便找到的项目是当时 JList 上唯一的项目。但这不起作用,它没有任何作用。任何有关如何做到这一点的建议都非常感谢

最佳答案

一个非常简单的解决方案可以是:

  1. 将所有项目存储到您偏好的集合或数组中。
  2. 使用 DefaultListModel (以编程方式动态)用于 JList
  3. 对于每个搜索操作,请清除模型,然后逐个添加与搜索条件匹配的项目。

例如:

import java.awt.BorderLayout;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Main {

//Assuming the class Item is similar to the following implementation:
public static class Item {
private final String name;

public Item(final String name) {
this.name = Objects.requireNonNull(name);
}

public String getName() {
return name;
}

//Overriding toString method, to avoid implementing a custom ListCellRenderer...
@Override
public String toString() {
return getName();
}
}

public static void main(final String[] args) {

//The following list contains all the initial Items lets say:
final List<Item> allItems = Arrays.asList(new Item("abc"), new Item("ABC"),
new Item("def"), new Item("DEF"));

//Create a DefaultListModelof Items (which is programmatically dynamic):
final DefaultListModel<Item> listModel = new DefaultListModel<>();

//Supply the model to the list on creation time (or later with setModel):
final JList<Item> list = new JList<>(listModel);

//Initialize the listModel to initially contain all items:
allItems.forEach(item -> listModel.addElement(item));

final JTextField searchField = new JTextField(10);
final JButton searchButton = new JButton("Search");
searchButton.addActionListener(e -> {
final String searchText = searchField.getText();
listModel.clear();
if (searchText.isEmpty()) //If the search text field is empty, lets say we want to display all values:
allItems.forEach(item -> listModel.addElement(item));
else
allItems.forEach(item -> {
if (item.getName().equalsIgnoreCase(searchText))
listModel.addElement(item);
});
});
final JPanel pageStart = new JPanel(); //FlowLayout
pageStart.add(searchField);
pageStart.add(searchButton);
final JPanel all = new JPanel(new BorderLayout());
all.add(pageStart, BorderLayout.PAGE_START);
all.add(new JScrollPane(list), BorderLayout.CENTER);
final JFrame frame = new JFrame("Searchable JList");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(all);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

关于java - 如何在 JList 中按属性搜索项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55820476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com