如何将按钮添加到特定的 JPanel 中

How to add a button into a specific JPanel

我有一个大面板。 bigPanel里面有多个panel(panel_1, panel_2, panel_3, etc....)

bigPanel 使用 GridBagLayout。 panel_1 等使用 GridLayout。

在另一个面板中,我创建了一个添加按钮。如果用户单击此按钮,将出现一个 JDialog,用户必须填写以下表格:

  1. 按钮名称:
  2. 人数:
  3. 字母表:

用户填写完JDialog表单后,将基于JDialog表单创建一个新按钮。

这段代码将在用户点击 JDialog 窗体中的 FINISHED 按钮后执行:

if(Number=="1"){
                    if(Alphabet=="A")
                    {   

                    JButton newButton = new JButton(buttonName);                        
                    //bigPanel.add(newButton);
                    //bigPanel.updateUI();  
                    panel_1.add(newButton);
                    panel_1.updateUI();

                    JOptionPane.showMessageDialog(null,"Successfully added !");
                    }

                    }
                    else if(Alphabet=="B"){
                    JButton newButton = new JButton(buttonName);                        
                    //bigPanel.add(newButton);
                    //bigPanel.updateUI();  
                    panel_2.add(newButton);
                    panel_2.updateUI();

                    JOptionPane.showMessageDialog(null,"Successfully added !");
                    }
                    ...
                }
if (Number=="2"){
                    ...
                    }
                 ...

我用数字 1 和字母 A 测试了 JDialog。目前我得到的结果是在控制台中发出警告,表明此行有问题:

panel_1.add(newButton);//line 313

控制台警告:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at UI2.actionPerformed(UI2.java:313)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access0(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.awt.EventQueue.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

未添加按钮。但是如果我改成

bigPanel.add(newButton);
bigPanel.updateUI();

新按钮已添加到 bigPanel。不幸的是,我希望将 newButton 添加到 panel_1 而不是 bigPanel..

请检查是否添加了panel_1