2010-01-25 77 views
4

我在Java Swing中使用JList,但是当我的对话框打开时,不会显示列表。Java Swing JList

private JList getJList() { 
    if (mylist == null) { 
    mylist = new JList(); 
    mylist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    mylist.setSize(new Dimension(154, 106)); 
    model.addElement("test"); 
    model.addElement("zwei"); 
    mylist.setVisible(true); 

    } 
    return mylist; 
} 

列表定义:

private JPanel getJContentPane() { 
    if (jContentPane == null) { 
    jContentPane = new JPanel(); 
    jContentPane.setLayout(new BorderLayout()); 
    jContentPane.add(getJList(), BorderLayout.CENTER); 

    } 
    return jContentPane; 
} 

这是一个JContentPane(/面板)

public fensterdrei(Frame owner) { 
    super(owner); 
    initialize(); 
    } 

代码调用getJContentPane()

private void initialize() { 
     this.setSize(300, 200); 
     this.setContentPane(getJContentPane()); 
     this.setTitle("Auswahl"); 
} 
+0

氩你没有看到列表框或只有其内容?另外,顺便说一句,你正在使你的列表“可见”,然后将其添加到窗格。 – Uri 2010-01-25 16:03:53

+0

JContentPane可见吗?你叫pack()吗? (只能猜测) – helios 2010-01-25 16:04:33

+0

我看不到方块 (set.visible只是一个测试:P) – Tyzak 2010-01-25 16:36:48

回答

6

我找不到你在哪里设置JList的模型?

喜欢的东西

mylist = new JList();  
mylist.setModel(model); 

请看看在Code Conventions for the Java Programming Language

FensterDrei而不是fensterdrei
myList而不是mylist

+0

嗨,你是对的, private DefaultListModel model2 = new DefaultListModel(); so - > if(mylist == null){ mylist = new JList(MODEL); – Tyzak 2010-01-25 18:39:09

4

它的getContentPane不getJContentPane,你呢不应该让它超载。

相反,在构造函数(或其他函数被调用的时候了),你做

getContentPane().setLayout(new BorderLayout()); 
getContentPane().add(getJList(), BorderLayout.CENTER); 
+0

嗨,当方法名称为getContentPane或getJContentPane时,它会有所不同吗?我认为这只是方法名称,不是吗? 那样? private void initialize(){ \t \t this.setSize(300,200); \t \t this.setContentPane(getJContentPane()); \t \t this.setTitle(“Auswahl”); \t \t getContentPane()。add(getJList(),BorderLayout.CENTER); \t \t getContentPane()。add(getJList(),BorderLayout。中央); \t} – Tyzak 2010-01-25 16:36:05

1

要回答你的问题,我需要看到调用getJContentPane以确保您实际上添加的代码JPanel在某处。我还需要查看是否已将某些内容分配给jContentPane,因为如果该面板为空,则只添加该列表。

我的猜测是,你实际上并没有将返回的面板添加到对话框,或者jContentPane已经被分配了非空值。

对myList.setVisible(true)的调用没有意义,因为它尚未添加到窗口中。当一个对话框变得可见时,其所有的孩子也会被看到。

+0

喜 私人无效初始化(){ \t \t this.setSize(300,200); \t \t this.setContentPane(getJContentPane()); \t \t this.setTitle(“Auswahl”); \t} 私人的JPanel getJContentPane(){ \t \t如果(jContentPane == NULL){ \t \t \t jContentPane =新JPanel(); \t \t \t jContentPane.setLayout(new BorderLayout()); \t \t \t jContentPane.add(getJList(),BorderLayout.CENTER); \t \t \t \t \t} \t \t回报jContentPane; \t} 你的意思是? – Tyzak 2010-01-25 16:31:57

+0

@Tyzak - 请编辑你的问题,在那里添加代码。 Danke – 2010-01-25 17:46:16

+0

嗨,所以解决方案已经找到,我不编辑命令,好吗? – Tyzak 2010-01-25 18:43:00