如果在另一个班级(package main
import (
"os"
"log"
)
func main() {
// If the file doesn't exist, create it, or append to the file
f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
_, err = f.Write([]byte("Hello"))
if err != nil {
log.Fatal(err)
}
f.Close()
}
)中发现ModalDialog extends JDialog implements ActionListener
方法,如何从班级actionPerformed(ActionEvent e)
查看?更进一步,如何检查我在ModalDialog中的两个按钮中的哪一个触发了ActionPerformed方法? (我知道Connect extends JFrame implements ActionListener
,但我需要从另一个班级查看。)
event.getSource
答案 0 :(得分:1)
如何从类中检查ModalDialog扩展如果actionPerformed(ActionEvent e)
,则JDialog实现ActionListener
这是如何将信息从一个类返回到另一个类的基本问题。简单的答案是提供一个getter方法,它返回所选的值。
首先定义要返回的值,这里我使用了enum
,因为它清楚地定义了可以返回的内容
public enum Option {
HUMAN, ROBOT;
}
更新ModalDialog
以提供getter以返回所选值
public class ModalDialog extends JDialog implements ActionListener {
private Option selection;
public ModalDialog() {
setModal(true);
Button btn8 = new Button("human");
btn8.addActionListener(this);
Button btn9 = new Button("robot");
btn9.addActionListener(this);
setLayout(new GridBagLayout());
add(btn8);
add(btn9);
pack();
}
public Option getSelection() {
return selection;
}
public void actionPerformed(ActionEvent e) {
//...
}
}
当对话框关闭时,调用者现在可以调用getSelection
来获取所选值(如果用户通过 [X] 按钮关闭对话框,则调用null
更进一步,如何检查我在ModalDialog中的两个按钮中的哪一个触发ActionPerformed方法?
这不是一个不常见的问题,您可以通过多种方式实现它。由于您已经在类级别实现了ActionListener
,因此您可以使用按钮中提供的actionCommand
支持,默认为按钮的文本
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
switch (cmd) {
case "human":
selection = Option.HUMAN;
break;
case "robot":
selection = Option.ROBOT;
break;
}
setVisible(false);
}
现在,当对话框关闭时,您只需请求所选的值...
ModalDialog dialog = new ModalDialog();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
Option selection = dialog.getSelection();
System.out.println("You choose " + selection);