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