检查ActionPerform方法是否发生但是来自另一个类

时间:2017-10-14 20:38:20

标签: java swing

如果在另一个班级(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

1 个答案:

答案 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);