Bizarro Swing JList模型行为

Bizarro Swing JList模型行为,swing,model,jlist,Swing,Model,Jlist,我在Swing应用程序中遇到了一个问题,我通过向它传递一个模型来创建一个简单的JList—即使模型已明显填充,JList也拒绝显示它自己的模型内容 DefaultListModel dlm = new DefaultListModel(); String[] modelElems = {"Apple", "Orange", "Banana"}; for(int i = 0; i < modelElems.length; i++) dlm.add(i, modelElems[i]);

我在Swing应用程序中遇到了一个问题,我通过向它传递一个模型来创建一个简单的JList—即使模型已明显填充,JList也拒绝显示它自己的模型内容

DefaultListModel dlm = new DefaultListModel();
String[] modelElems = {"Apple", "Orange", "Banana"};
for(int i = 0; i < modelElems.length; i++)
    dlm.add(i, modelElems[i]);

JList lstFruitList = new JList(dlm);
lstFruitList.setVisible(true);
但是,如果我尝试循环并打印模型中的结果名称,通过在每次迭代时调用Stringdlm.geti(我是迭代变量),它会将每个模型元素打印为null


那个代码对我来说很好用。一些想法:

我看到您在JList上调用setVisible,您如何将其添加到您正在显示的内容中? 是否在显示JFrame后添加元素?如果我没记错的话,那就不行了,我想你必须重新粉刷所有的东西。 确保你没有在某个时候弄乱列表模型;也许在代码后面的某个时候,你会改变它? 确保您实际看到的是正确的元素;可能您的列表隐藏在其他内容后面?请尝试设置背景颜色,即lstFruitList.setBackgroundColor.BLUE; 最后想一想,你确定你已经正确地编译了它吗?我有时会不小心忘记编译,或者把一些东西弄乱了,正在运行一个旧版本的代码,对为什么有些东西不工作感到困惑。 以下是我运行的代码供参考:

import java.awt.*;
import javax.swing.*;

public class javatest{

    public static void main(String[] args){
            JFrame f = new JFrame("HELLO");
            DefaultListModel dlm = new DefaultListModel();
            String[] modelElems = {"Apple", "Orange", "Banana"};
            for(int i = 0; i < modelElems.length; i++)
                dlm.add(i, modelElems[i]);

            JList lstFruitList = new JList(dlm);
            lstFruitList.setVisible(true);

            JPanel p = new JPanel();
            p.add( lstFruitList );
            f.add( p );
            f.setLocation(0,0);
            f.setSize(400,400);
            f.setVisible(true);
    }
}

谢谢你的回复@rm5248-有几件事。1是的,它绝对编译得很好;我在IDE中使用NB 7.0,并且没有生成错误。2是的,设置背景颜色很有效,所以我知道我看到的是正确的组件!3我实际上是在NB GUI builder中部署GUI,我现在怀疑这是根本问题。4为什么在JList构造函数中设置元素后,修改添加到的元素以及将其从模型中删除会出现问题?这听起来不是很动态,尤其是对于Java!您对GUI builder有何看法?此外,NB GUI builder自动生成的不可变代码不能从NB内部进行编辑。如果我使用GUI构建器将JList的模型设置为这三个fruit值,我会看到它在自动生成的JList构造函数中添加了一个匿名AbstractModel子类。这似乎奏效了。在我自己身上使用相同的代码是行不通的!他们的代码可能是某种窗格,我对根窗格、玻璃窗格等的理解不太熟悉。在我的JList上,它阻止了我查看模型?因此此代码有效…有人能回答为什么???AbstractListModel dlm=new javax.swing.AbstractListModel{String[]strings={Apple,Orange,Banana,Pear};public int getSize{return strings.length;}public Object getElementAtint i{return strings[i];};lstavaailableplans.setModeldlm;
import java.awt.*;
import javax.swing.*;

public class javatest{

    public static void main(String[] args){
            JFrame f = new JFrame("HELLO");
            DefaultListModel dlm = new DefaultListModel();
            String[] modelElems = {"Apple", "Orange", "Banana"};
            for(int i = 0; i < modelElems.length; i++)
                dlm.add(i, modelElems[i]);

            JList lstFruitList = new JList(dlm);
            lstFruitList.setVisible(true);

            JPanel p = new JPanel();
            p.add( lstFruitList );
            f.add( p );
            f.setLocation(0,0);
            f.setSize(400,400);
            f.setVisible(true);
    }
}