【问题标题】:How do I sort items in a JList alphabetically?如何按字母顺序对 JList 中的项目进行排序?
【发布时间】:2015-07-03 09:40:03
【问题描述】:

基本上我要做的是创建一个显示大量名称列表的程序。我正在尝试在我拥有的列表中按字母顺序对名称进行排序。我正在使用一个 ArrayList。我知道我可以使用集合按字母顺序对它们进行排序,但是如果在这种情况下我使用的是对象(NPC),我该怎么做

这就是它的样子。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class NPC {

public ArrayList<NPC> npcs = new ArrayList<NPC>();

private int id; 
private String name;
static String file_name = "./npclist.txt";

public NPC(int id, String name) {
    this.id = id;
    this.name = name;
}

public static void loadNPCs(java.io.File file) {
    new ReadFile(file_name);
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void sortByName() {
    for(int i=0; i < npcs.size(); i++){
        String name = npcs.get(i).getName();
        names.add(name);
    }
    Collections.sort(names);

    for(String counter: names) {
        System.out.println(counter);
    }
}

public void setName(String name) {
    this.name = name;
}
}

我的单选按钮

        this.radioBtn = new JRadioButton("Sort by: " + (toggleBtn ? "ID" : "Names"));
    radioBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == radioBtn) {
                if (toggleBtn) {
                    sortByID(e);
                    toggleBtn = false;
                    radioBtn.setText("Sort by: " + (toggleBtn ? " ID" : "Names"));
                    radioBtn.setPreferredSize(new Dimension(108, 12));
                } else if (!toggleBtn) {
                    sortByName(e);
                    toggleBtn = true;
                    radioBtn.setText("Sort by: " + (toggleBtn ? "ID" : "Names"));
                    radioBtn.setPreferredSize(new Dimension(108, 12));
                }
            }
        }       
    });
    gbc.insets = new Insets(5, 5, 5, 16);
    gbc.anchor = GridBagConstraints.LINE_END;
    gbc.gridx = 0;
    gbc.gridy = 1;

    panel.add(radioBtn, gbc);

和我的默认列表模型

    private DefaultListModel<String> itemListModel() {
    listModel = new DefaultListModel<String>();
    for (NPC npc : ReadFile.getNPCs()) {
        if (npc != null) {
            listModel.addElement(npc.getName());
        }
    }
    return listModel;
}

【问题讨论】:

  • 使用Collections.sort()
  • 我尝试使用 Collections.sort() 但它不会接受参数 NPC..

标签: java arraylist collections jlist


【解决方案1】:

NPC 应该实现 Comparable 接口。 提供 compareTo 方法的实现

【讨论】:

  • 我不确定这对我有什么好处。 @Override public int compareTo(NPC o) { return o.getName().compareTo(Integer.toString(o.getId())); } 我只是想对名称进行排序,而不是对 ID 进行排序。 ID 已排序。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2011-08-29
  • 2010-11-23
相关资源
最近更新 更多