Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DefaultListModel没有';排序ArrayList时,t正在更改_Java_Swing_Sorting_Collections_Defaultlistmodel - Fatal编程技术网

Java DefaultListModel没有';排序ArrayList时,t正在更改

Java DefaultListModel没有';排序ArrayList时,t正在更改,java,swing,sorting,collections,defaultlistmodel,Java,Swing,Sorting,Collections,Defaultlistmodel,我在显示按名称排序Person对象的方法的结果时遇到问题sortujKolekcjePoImionach()。当我把它放在rozpocznijProgram()wch中时,这个方法工作得非常好,它正在加载一些名字,然后把它放在Person对象中,然后把每个人都放到ArrayList中。DefaultListModelmodel刷新Jlist,使其工作正常。但是,当我将方法sortujKolekcjePoImionach()放在我连接到单个按钮的其他claas中时,类sortujKolekcjeP

我在显示按名称排序Person对象的方法的结果时遇到问题
sortujKolekcjePoImionach()
。当我把它放在
rozpocznijProgram()
wch中时,这个方法工作得非常好,它正在加载一些名字,然后把它放在Person对象中,然后把每个人都放到ArrayList中。DefaultListModel
model
刷新Jlist,使其工作正常。但是,当我将方法
sortujKolekcjePoImionach()
放在我连接到单个按钮的其他claas中时,
类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


        }
    }
公共类主{
JFrame oknoGlowne;
JTextArea sciezkaDoPliku;
DefaultListModel=新的DefaultListModel();
JList listaOsob;
杰布顿·沃茨泰吉;
杰布顿·索图吉米;
伊布顿;
苏尔图吉米奈兹维斯科达特;
ArrayList daneOsobowe=新的ArrayList();
public void createGUI(){
oknoGlowne=新JFrame(“Kolekcje”);
oknoGlowne.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sciezkaDoPliku=新JTextArea();
wczytaj=新的JButton(“wczytaj”);
sortujImie=新的JButton(“Posortuj Imiona”);
sortujDate=新的JButton(“Posortuj Daty”);
sortujImieNazwiskoDate=新的JButton(“Posortuj Imiona Nazwiska Daty”);
addActionListener(新rozpocznijProgram());
listaosab=new JList(model);//model
sortujImie.addActionListener(新的sortujKolekcjePoImionach());//尝试按名称对PERSON对象排序
//GUI的其余部分。。。
设置首选尺寸(新尺寸(870550));
setLayout(新的FlowLayout());
oknoGlowne.setVisible(真);
oknoGlowne.pack();
}
//方法,该方法正在将PERSON对象添加到数组中
类rozpocznijProgram实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件evt){
试一试{
Wczytywanie wczytaj=新的Wczytywanie(sciezkaDoPliku.getText());
daneOsobowe=wczytaj.kopiowanietability(sciezkaDoPliku.getText());
//Collections.sort(daneOsobowe,new SortujImieNazwiskoData());

对于(int i=0;i您有一个人员列表(
daneOsobowe
),列表中的每个人员都添加到一个列表模型中,该列表模型维护自己的人员列表。因此,实际上您有两个不同的人员列表:一个在您自己的类中,另一个在列表模型中

对自己的列表进行排序并不能神奇地对模型使用的列表进行排序。即使这样,模型也必须触发事件才能重新绘制视图本身

因此,如果您对列表进行排序,则需要更新列表模型,以便对列表模型中的人员进行重新排序(例如,从模型中删除所有人员并以新的顺序重新添加)


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

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

对自己的列表进行排序并不能神奇地对模型使用的列表进行排序。即使这样,模型也必须触发事件才能重新绘制视图本身

因此,如果您对列表进行排序,则需要更新列表模型,以便对列表模型中的人员进行重新排序(例如,从模型中删除所有人员并以新的顺序重新添加)


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

您需要将排序后的数据添加到表模型中,就像最初那样,但首先要清除:

model.clear();

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

另一种方法是使用Swing的
TableRowSorter
。请参见此。

您需要将已排序的数据添加到表模型中,就像最初那样,但首先要清除:

model.clear();

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

另一种方法是使用Swing的
TableRowSorter
。请看这个。

我正在考虑这个解决方案。所以除了将排序后的DaneoSobotwe的元素复制到模型之外,没有其他方法了?请看上面提供的示例。我正在考虑这个解决方案。所以除了复制排序后的DaneoSobot的元素之外,没有其他方法了e到模型?看看上面提供的示例。请学习java命名约定并坚持它们。请学习java命名约定并坚持它们。