繁体   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