检查JButton是否在特定的JPanel中

时间:2016-11-11 19:23:20

标签: java swing user-interface coding-style

我正在使用Java创建GUI应用程序。主框架中有不同的部分,每个部分都有特定的功能。标题面板包含按钮Submit,Undo,Shuffle,Help和Quit。以下是示例代码:

JPanel header = new JPanel();  

JButton submit = new JButton("Submit");  
header.add(submit);  

JButton undo= new JButton("Undo");  
header.add(undo); 

JButton shuffle= new JButton("Shuffle");  
header.add(shuffle);

JButton help= new JButton("Help");  
header.add(help); 

JButton quit = new JButton("Quit");  
header.add(quit); 

在我的代码中,我需要检查单击的按钮是否不在标题面板中(其他面板中也有按钮)。

public void actionPerformed(ActionEvent e)
   {
      String clicked = e.getActionCommand();

      if(!clicked.equals("Submit") && !clicked.equals("Undo") && !clicked.equals("Help")&& !clicked.equals("Quit") && !clicked.equals("Shuffle")){  


      //some code here

是否有其他更简洁的方法来检查点击的按钮是否不在标题面板中?我需要在另一个包含更多按钮的面板中做类似的事情。我相信使用IF语句检查每个按钮是低效和不整洁的。

2 个答案:

答案 0 :(得分:1)

老实说,我只是为每个按钮实施操作。它可能需要更多代码,但它是一个更好的解决方案。但如果你坚持这样做,你可以试试这个

    public void actionPerformed(ActionEvent e) {
        if (!Arrays.asList(PANEL.getComponents()).stream().filter(b -> b instanceof JButton)
            .map(b -> (JButton) b).filter(b -> 
                 b.getText().equals(e.getActionCommand())).findFirst().isPresent()) {
             // execute code if button is not a child of PANEL
        }
    }

答案 1 :(得分:0)

您可以分别对每个按钮使用addActionListener