2017-09-27 21 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

相关问题