java - 如果绘制 JOptionPane,则不会绘制我的面板的组件

标签 java swing user-interface joptionpane

所以我有一个类,它在第一次单击武器按钮时创建以下 GUI: enter image description here

我点击侧面的每个按钮都应该相应地切换到不同的面板。然而,目前我只是在武器面板上工作。为了节省内存,我决定保存在搜索框中输入的所有内容,如果用户决定再次打开面板,应用程序将再次搜索列表。目前,我只有一个名为 test 的项目,如您所见,我的问题是,如果我在搜索框中输入不可用的内容并且我切换面板,这就是我的结果:

enter image description here

预期结果应该是错误消息,但搜索框、按钮和 JList 仍然可用,且 JList 显示“未列出武器”。

现在,当我删除 JOptionPane 时,我得到以下结果,这是结果的一半:

enter image description here

我想知道为什么出现错误消息时面板没有绘制?

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() 封闭容器,如 here 所示。 ,并可能调用repaint()。更好的方法是添加 View 组件,例如JList,布局并更新其模型,例如ListModel,根据需要。在此exampleJList 监听附近表的模型。

关于java - 如果绘制 JOptionPane,则不会绘制我的面板的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46451935/

相关文章:

java - 线程和jtable

java - 如何用java画框图?

java - 避免 "If (parameter == null)"语句

使用 AES : Accepts only certain keys 的 Java 字符串加密

java - 如何使 JPanel 组件作为 JTree 中的节点可用?

java - GridLayout JButton JOptionPane 与每个按钮的 ActionListener

java.lang.ArrayIndexOutOfBoundsException : 9 error 异常

java - 无法在 JPanel 中画线

c# - C# 中 Contains( @"""")) 的含义

java - 安卓全屏摄像头