gpt4 book ai didi

java - 当 ArrayList 排序时,DefaultListModel 不会改变

转载 作者:行者123 更新时间:2023-12-02 00:09:28 26 4
gpt4 key购买 nike

我在显示按名称对 Person 对象排序的方法的结果时遇到问题 sortujKolekcjePoImionach() 。当我把它放入rozpocznijProgram()时,这个方法就完美了。 wchich 正在加载一些名称并将其放入 Person 对象中,然后将每个 Person 放入 ArrayList 中。默认列表模型 model刷新 Jlist,效果很好。但是当我输入方法sortujKolekcjePoImionach()时到我连接到单个按钮的其他 claas 不起作用 class sortujKolekcjePoImionach 。我不知道模型是否没有看到ArrayList daneOsobowe已排序或者我可能不知道如何使用 Collections.sort(daneOsobowe,new SortujImie());

Main.java

public class Main {

JFrame oknoGlowne;
JTextArea sciezkaDoPliku;
DefaultListModel<Person> model = new DefaultListModel<>();
JList listaOsob;
JButton wczytaj;
JButton sortujImie;
JButton sortujDate;
JButton sortujImieNazwiskoDate;
ArrayList daneOsobowe = new ArrayList();

public void createGUI(){

oknoGlowne = new JFrame("Kolekcje");
oknoGlowne.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

sciezkaDoPliku = new JTextArea();

wczytaj = new JButton("Wczytaj");

sortujImie = new JButton("Posortuj Imiona");
sortujDate = new JButton("Posortuj Daty");
sortujImieNazwiskoDate = new JButton("Posortuj Imiona Nazwiska Daty");

wczytaj.addActionListener(new rozpocznijProgram());

listaOsob = new JList(model); //MODEL
sortujImie.addActionListener(new sortujKolekcjePoImionach()); //TRYING TO SORT PERSON OBJECTS BY NAME
//rest of GUI...
oknoGlowne.setPreferredSize(new Dimension(870, 550));
oknoGlowne.setLayout(new FlowLayout());
oknoGlowne.setVisible(true);
oknoGlowne.pack();
}
//METHOD WHICH IS ADDING PERSON OBJECTS TO ARRAY
class rozpocznijProgram implements ActionListener{
@Override
public void actionPerformed(ActionEvent evt) {

try {
Wczytywanie wczytaj = new Wczytywanie(sciezkaDoPliku.getText());
daneOsobowe = wczytaj.kopiowanieTablicy(sciezkaDoPliku.getText());

//Collections.sort(daneOsobowe,new SortujImieNazwiskoData());

for(int i=0; i<daneOsobowe.size(); i++){
model.add(i, (Person) daneOsobowe.get(i));
System.out.println(model.get(i));
}

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

}
}
//METHOD WHICH IS SORTING PERSON OBJECTS BY NAME
class sortujKolekcjePoImionach implements ActionListener{
@Override
public void actionPerformed(ActionEvent evt) {

Collections.sort(daneOsobowe,new SortujImie()); //IT DOESN'T WORK, JLIST DOESN'T CHANGE AFTER CLICK


}
}

最佳答案

您有一个人员列表 (daneOsobowe),列表中的每个人员都被添加到一个 ListModel 中,该模型维护自己的人员列表。因此,您实际上有两个不同的人员列表:一个在您自己的类(class)中,另一个在列表模型中。

对您自己的列表进行排序不会神奇地对模型使用的列表进行排序。即使确实如此,模型也必须触发事件才能使 View 重新绘制自身。

因此,如果您对列表进行排序,则需要更新列表模型,以便对列表模型中的人员重新排序(例如,通过从模型中删除所有人员并将它们重新添加到新模型中)订单)。

另一个更好的解决方案是实现您自己的列表模型(基于 AbstractListModel),并在此模型中提供一个排序方法,用于对内部列表进行排序并触发适当的事件。

关于java - 当 ArrayList 排序时,DefaultListModel 不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13168890/

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