2017-09-27 69 views
0

所以我有一個創建以下GUI第一次一類是武器的按鈕被點擊: enter image description here如果JOptionPane的被抽我的面板的組件未按

就在身邊每一個按鈕,我點擊應該切換相應地轉到不同的面板。然而,目前,我只是在武器面板上工作。爲了節省內存,我決定保存在搜索框中輸入的內容,如果用戶決定再次打開面板,應用程序會再次搜索列表。目前,我只有一個項目叫測試正如你看到的,我的問題是,如果我在搜索框中鍵入的東西,這是不可用,而且我開關面板,這是我的結果:

enter image description here

預期結果應該是錯誤消息,但是在搜索框中,按鈕和JList仍然可用,JList顯示「沒有武器列出」。

現在,當我刪除的JOptionPane我得到這一半的結果如下:

enter image description here

我想知道爲什麼會出現錯誤信息時,不繪製的面板?

PS:我有一個return語句之前輸入了一些控制檯消息,一個接一個的JOptionPane後,另一個,他們都得到正確打印

這裏是我的面板代碼:

private static JPanel searchMenu() { 

    JPanel pnl = new JPanel(); 
    pnl.setOpaque(false); 
    pnl.setLayout(new BorderLayout()); 

    Object[] search = search(); 

    if(search.length == 0) { 
     JOptionPane.showMessageDialog(MyFrame.getFrame(), 
        "No weapons with your search criteria has been found.\n" 
       + "What you type in the search box is searched for in the weapon names, classnames and their description.\n", 
       "No Weapon found", JOptionPane.ERROR_MESSAGE); 

     search = new Object[] {"No Weapons listed"}; 
    } 

    System.out.println(search.length); 

    DefaultListModel list = new DefaultListModel(); 
    for(Object o: search) list.addElement(o); 

    JList searched = new JList(); 

    searched.setModel(list); 
    searched.setPreferredSize(new Dimension(250, 700)); 
    searched.setFont(new Font("Tahoma", Font.PLAIN, 15)); 

    pnl.add(searched, BorderLayout.WEST); 

    pnl.add(weaponDisplay(lastSelec),BorderLayout.CENTER); 

    JPanel space = new JPanel(); 
    space.setOpaque(false); 
    pnl.add(space,BorderLayout.SOUTH); 

    return pnl; 
} 
+1

爲了儘快提供更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

回答

2

它看起來像你正在添加組件到一個容器它已被製成可見。至少,您需要validate()封閉的容器,如here所示,並可能調用repaint()。更好的方法是添加視圖組件,例如JList,以佈局並更新其模型,例如,根據需要使用ListModel。在這example,一個JList聽附近的表模型。

0

的JOptionPane的對話框是模態的,所以他們停止執行調用代碼,直到對話框關閉。因此,在顯示消息對話框之前,您需要首先填充並顯示列表,並將「沒有武器列出」作爲其內容。

+0

一旦對話結束我仍然沒有得到面板的組件繪製,但是println都打印在控制檯上 –

+0

search = new Object [] {「No Weapons listed」};它不是用新的「搜索」數組內容填充列表模型。 – BinaryDigit09

+0

@ BinaryDigit09:建議,[這裏](https://stackoverflow.com/a/18728637/230513)模態對話框只會阻止用戶交互;它不會阻止更新。 – trashgod

相關問題