Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查JButtons是否在特定的JPanel中_Java_Swing_User Interface_Coding Style - Fatal编程技术网

Java 检查JButtons是否在特定的JPanel中

Java 检查JButtons是否在特定的JPanel中,java,swing,user-interface,coding-style,Java,Swing,User Interface,Coding Style,我正在使用Java创建一个GUI应用程序。主框架中有不同的部分,每个部分都有特定的功能。标题面板包含提交、撤消、无序移动、帮助和退出按钮。以下是示例代码: JPanel header = new JPanel(); JButton submit = new JButton("Submit"); header.add(submit); JButton undo= new JButton("Undo"); header.add(undo); JButton shuffle=

我正在使用Java创建一个GUI应用程序。主框架中有不同的部分,每个部分都有特定的功能。标题面板包含提交、撤消、无序移动、帮助和退出按钮。以下是示例代码:

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); 
进一步往下看我的代码,我需要检查点击的按钮是否不在标题面板中(其他面板中也有按钮)


是否有其他更简洁的方法来检查单击的按钮是否不在标题面板中?我需要在另一个包含更多按钮的面板中执行类似操作。我认为,使用IF语句检查每个按钮效率低下且不整洁。

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

    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
        }
    }

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

如果需要对标题面板按钮进行不同处理,请不要对其使用相同的回调;设置不同的
ActionEvent
listener使用事件源并比较实例而不是字符串。嗯,我不明白您面临的问题是什么。使用一个操作侦听器或多个侦听器与包含它们的父容器无关。为什么需要检查按钮是否在特定的JPanel中?实际上,我已经为每个按钮添加了一个ActionListener,如下所示:
submit.addActionListener(this)
我做错什么了吗?
    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
        }
    }