I have a private JPanel :
private JPanel bigPanel;
Inside the bigPanel, I have another ten JPanel(panel_1D, panel_2D...). Each of them have a few buttons. Those buttons are added with deleteAction actionListener:
JPanel panel_1D = new JPanel();//Panel ONE
GridBagConstraints gbc_panel_1D = new GridBagConstraints();...
bigPanel.add(panel_1D, gbc_panel_1D);
GridBagLayout gbl_panel_1D = new GridBagLayout();...
panel_1D.setLayout(gbl_panel_1D);
JButton button_2 = new JButton("ECG");
GridBagConstraints gbc_button_2 = new GridBagConstraints();...
button_2.addActionListener(deleteAction);
panel_1D.add(button_2, gbc_button_2);
...
I created a DELETE button in other panel(outside of the bigPanel):
JButton button_38 = new JButton("DELETE");
button_38.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null, "Delete any task by clicking it." , "INFO :
", JOptionPane.INFORMATION_MESSAGE);
deleteNow = true;
//allowOpen =false; }
});
Then I set up deleteAction method:
private ActionListener deleteAction = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
JButton button = (JButton) ae.getSource();
if (deleteNow)
{ //allowOpen=false;
bigPanel.remove(button);
bigPanel.revalidate();
bigPanel.repaint();
deleteNow = false;
}
else
{
System.out.println("My COMMAND IS : " + button.getActionCommand());
}
}
};
Currently, if I RUN, I will click DELETE button. Then, a pop up message "Delete any task by clicking it." shown. So when I closed the pop up message, I clicked the button that I want to delete. Unfortunately, the button I clicked did not deleted.
UPDATE: After I change
bigPanel.remove(button);
bigPanel.revalidate();
bigPanel.repaint();
to
button.getParent().remove(button);
button.getParent().revalidate();
button.getParent().repaint();
I got warning in console :
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at UI2$1.actionPerformed(UI2.java:128)
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.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.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)
You need to call remove()
on a container which contains coponent you want to remove, so instead:
bigPanel.remove(button);
you should call for example:
panel1_D.remove(button);
Because buttons
are not in bigPanel
directly (but in sub-panel). However, if you have a multiple panels with multiple buttons, the better solution would be:
button.getParent().remove(button);
getParent()
method returns parent container for given component, so it should work with every button
and you don't need to create methods for every group of buttons in different panels.