2010-01-25 104 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