Bizarro Swing JList模型行为

时间:2011-08-19 18:12:57

标签: 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]);

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

当我的Swing应用程序运行时,我在屏幕上看到JList,但它完全是空的!我看了无数的例子,倾注了Swing教程,似乎无法弄清楚发生了什么。有人曾经发生过这种事吗?!?任何明显错误的东西?!?

注意:

以下print语句确实显示我的模型有3个元素:

// Prints "Fruit List model has a size of 3"
System.out.println("Fruit List model has a size of " + dlm.size());

然而,如果我尝试循环并在我的模型中打印水果的名称,通过在每次迭代时调用(String)dlm.get(i)(其中i是迭代变量),它将每个模型元素打印为null ...

hmmmm

1 个答案:

答案 0 :(得分:0)

该代码适用于我。一些想法:

  • 我看到你在JList上调用setVisible,你究竟是如何将它添加到你正在显示的内容中?
  • 您是否在之后添加了元素,以显示您的JFrame?如果我没记错的话,那就行不通了,我想你必须重新粉刷一切。
  • 确保您在某些时候没有搞乱列表模型;也许在代码的某个时候,你正在改变它?
  • 确保您实际上正在查看正确的元素;也许你的列表隐藏在其他东西后面?(尝试设置背景颜色,即lstFruitList.setBackground(Color.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);
    }
}