簡體   English   中英

如果繪制了JOptionPane,則不會繪制我的面板的組件

[英]My Panel's components are not drawn if JOptionPane is drawn

因此,我有一個可在首次單擊武器按鈕時創建以下GUI的類: 在此處輸入圖片說明

我單擊側面的每個按鈕都應相應地切換到其他面板。 但是,目前,我只是在武器面板上工作。 為了節省內存,我決定保存在搜索框中鍵入的內容,如果用戶決定再次打開面板,則應用程序將再次搜索列表。 目前,如您所見,我只有一個名為test的項目,我的問題是,如果我在搜索框中鍵入了某些內容(該內容不可用)並且切換了面板,這就是我的結果:

在此處輸入圖片說明

預期的結果應該是錯誤消息,但是搜索框,按鈕和JList仍然可用,並且JList顯示“未列出武器”。

現在,當我刪除JOptionPane時,得到的結果是結果的一半:

在此處輸入圖片說明

我想知道為什么當錯誤消息出現時未繪制面板?

PS:我輸入了一些控制台消息,一個在Joptionpane之后,另一個在return語句之前,它們都被正確打印了

這是我的面板代碼:

    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;
}

看起來像是在向容器添加組件之后 至少,你需要validate()封閉容器,如圖所示這里 ,可能調用repaint() 更好的方法是將視圖組件(例如JList添加到布局中,並根據需要更新其模型 (例如ListModel )。 在此示例中JList偵聽附近表的模型。

JOptionPane的對話框是模式對話框,因此它們將停止執行調用代碼,直到關閉對話框。 因此,在顯示消息對話框之前,您將要首先填充並顯示列表,其內容為“未列出武器”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM