Java 添加一个对象后,JList显示为空

Java 添加一个对象后,JList显示为空,java,swing,jlist,Java,Swing,Jlist,我在JScrollPane(=spList)中有一个JList(=lstIncrements),它包含对象(=Increments)的字符串表示形式。我可以“添加”和“删除”这些增量,并可以将它们加载或保存到硬盘。启动时,保存的列表(ArrayList)将加载到vom HD并正确显示在Jlist中。 问题:如果我删除了一些并添加了一些其他的,所有都可以正常工作,但是如果我在开始时添加了一个以上的,JList将显示为完全空。如果我保存并重新启动该程序,则仅正确显示我添加的所有增量(包括增量) Ac

我在JScrollPane(=spList)中有一个JList(=lstIncrements),它包含对象(=Increments)的字符串表示形式。我可以“添加”和“删除”这些增量,并可以将它们加载或保存到硬盘。启动时,保存的列表(ArrayList)将加载到vom HD并正确显示在Jlist中。 问题:如果我删除了一些并添加了一些其他的,所有都可以正常工作,但是如果我在开始时添加了一个以上的,JList将显示为完全空。如果我保存并重新启动该程序,则仅正确显示我添加的所有增量(包括增量)

ActionListener按钮中的代码,用于从ListModel添加和删除递增+代码:

public void actionPerformed(ActionEvent e) {
            switch (e.getActionCommand()) {
            case "add":
                System.out.println("add"); //for debug only
                Incredient i=getIncredientFromBoxes(); //Generates new Incredient from textboxes
                Incredient.addIncredient(i); //adds an Incredient to Incredient-ArrayList
                LstIncredients.repaint();
                break;
            case "del":
                System.out.println("del");
                Incredient iDel = getIncredientFromBoxes();
                Incredient.delIncredient(iDel);
                LstIncredients.repaint();

                break; ...

ListModel<String> incredientsModel = new ListModel<String>() {

        @Override
        public int getSize() {
        String pattern = txtName.getText(); // pattern is for filtering the Incredients-Array-List
            System.out.println("ListModel.getSitze: "+Incredient.getList(pattern).size()); //for debugging. Incredient-Class works fine 
            return Incredient.getList(pattern).size(); //returns a ArrayList
        }

        @Override
        public String getElementAt(int index) {
            String pattern = txtName.getText(); // filter for shown incredients
            System.out.println("getElement at: "+index); //for debugging
            return Incredient.getList(pattern).get(index).toString();

        }
public void actionPerformed(ActionEvent e){
开关(如getActionCommand()){
案例“添加”:
System.out.println(“add”);//仅用于调试
增量i=getIncremedientFromboxes();//从文本框生成新的增量
increment.addincredent(i);//将增量添加到增量ArrayList
lstIncrements.repaint();
打破
案例“del”:
系统输出打印项次(“del”);
增量iDel=getIncremedientFromboxes();
增量增量增量(iDel);
lstIncrements.repaint();
打破
ListModel IncremedientsModel=新ListModel(){
@凌驾
公共int getSize(){
String pattern=txtName.getText();//模式用于过滤递增数组列表
System.out.println(“ListModel.getSitze:+increment.getList(pattern.size());//用于调试。increment类工作正常
返回递增的.getList(pattern).size();//返回一个ArrayList
}
@凌驾
公共字符串getElementAt(int索引){
String pattern=txtName.getText();//筛选显示的递增项
System.out.println(“getElement at::+index);//用于调试
返回递增的.getList(模式).get(索引).toString();
}
如果“public int getSize()”大于开头的大小,则甚至不会调用“public String getElementAt(int index)”


也许有人能帮我?

我想你的ListModel实现会引起问题,我认为没有理由创建自定义ListModel,只需使用DefaultListModel。我怀疑列表的新元素数据需要添加到模型中。代码在哪里?列表模型应该发送有关更改的事件。如果你这样做直接说来,不需要调用
repaint
。但是使用
repaint
调用而不是propert事件通知不足以更新
JList
的状态。@Holger:问题是:如果我的JList中有f.e.100项,我可以删除和添加,并且可以做任何我想做的事情。但是如果有101多个项目在其中,JList变为空。当我保存它时,关闭应用程序,重新启动并从HDD加载这101个项目,然后所有101个项目都显示出来,只有当我添加第102个项目时,它才会变为空。初始化ListModel或JList时,似乎限制了最大项目数,但我不知道如何修复它。
似乎有一个问题初始化ListModel或JList时,限制最大项数
-限制将是int变量的最大值,因为模型的方法使用int字段作为参数。
我不知道如何修复它。
-我已经给了您一个建议。