2016-02-29 55 views
0

对于我的程序,无论用户何时添加一个按钮,该按钮都会添加到“panel1”和“panel2”。到目前为止,我可以通过它在第一个JPanel panel1中删除用户需要的按钮。但是,如何根据我在下面提供的代码删除第二个JPanel中的相同按钮?我应该检查第二个面板是否包含同名的按钮?我应该怎么做?如何删除另一个JPanel中的相同按钮?

public class deleteButton 
{ 
    public boolean deleteNow = false; 

    class ClickListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      deleteNow = true; 
     } 
    } 
    ActionListener deleteButtonClicked = new ClickListener(); 
    deleteButton.addActionListener(deleteButtonClicked); 

    class ClickListenerTwo implements ActionListener 
    { 
     public void actionPerformed(ActionEvent f) 
     { 
      JButton buttonThatWasClicked = (JButton) e.getSource(); 
      if (deleteNow == true) 
      { 

       panel1.remove(buttonThatWasClicked); 
       panel1.revalidate(); 
       panel1.repaint(); 
       //This is where I want it to delete from panel2. 

       deleteNow = false; 
      } 
      else 
      { 
       System.out.println("The button wasn't deleted"); 
      } 
     } 
    } 

}

+1

也许您应该使用Map '某种或其他查找表的 – MadProgrammer

+0

@MadProgrammer所以我不能使用“panel2.remove(buttonThatWasClicked)”?我必须使用“地图”? –

+0

一个组件不能同时驻留在两个容器上,所以你必须有两个'JButton'实例,所以你需要将它们“配对”在一起,所以你可以找到它们 – MadProgrammer

回答

1

可以遍历组件树找到您的按钮。事情是这样的

用法:

JButton btn = findButtonByText(panel2, buttonThatWasClicked.getText()); 
if (btn != null && btn.getParent() != null) { 
    btn.getParent().remove(btn); 
} 
+0

一个'Map'会更快,更简单,更高效和强大 – MadProgrammer

0

有与从JPanel删除组件的代码没有问题。也许在代码的其他部分可能会有其他问题,但下面的代码可以很好地工作,因为您可以检查逻辑并编辑代码:

public class DeleteButton extends JFrame { 
    private boolean flag; 

    public DeleteButton() { 
     setSize(new Dimension(400, 400)); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     getContentPane().add(panel); 

     JButton button1 = new JButton("Set Flag"); 
     panel.setLayout(new FlowLayout()); 
     panel.add(button1); 
     JButton button2 = new JButton("Delete"); 
     panel.add(button2); 

     button1.addActionListener(e -> flag = true); 
     button2.addActionListener(e -> { 
      JButton buttonThatWasClicked = (JButton) e.getSource(); 
      if (flag) { 
       panel.remove(buttonThatWasClicked); 
       panel.revalidate(); 
       panel.repaint(); 
       flag = false; 
      } else { 
       System.out.println("The button wasn't deleted"); 
      } 
     }); 
     setVisible(true); 
    } 
    public static void main(String[] args) { 
     new DeleteButton(); 
    } 
} 
相关问题