2017-10-14 146 views
0

如何檢查類ModalDialog extends JDialog implements ActionListener是否actionPerformed(ActionEvent e)發生在另一個類(Connect extends JFrame implements ActionListener)中的方法?還有一步,如何檢查我在ModalDialog中的哪個按鈕觸發了ActionPerformed方法? (我知道event.getSource,但我需要從另一個班級查看)。檢查ActionPerform方法是否發生,但來自另一個類

public ModalDialog() 
{ 
    btn8 = new Button("human"); 
    btn8.setMaximumSize(new Dimension(60,40)); 
    btn8.addActionListener(this); 

    btn9 = new Button("robot"); 
    btn9.setMaximumSize(new Dimension(60,40)); 
    btn9.addActionListener(this); 
} 
public void actionPerformed(ActionEvent e) 
{ 

} 
class Connect extends JFrame implements ActionListener 
{ 
public void actionPerformed(ActionEvent e) 
{ 
    ModalDialog md = new ModalDialog(); 
    if(md.ActionPerformed(e)....)...something like that... 
} 
} 
+0

附註:你應該更好地命名你的按鈕變量。 – notyou

+0

在ActionEvent類中沒有類似e.getSource()的東西嗎? – deHaar

回答

1

如何從一個類ModalDialog擴展的JDialog實現的ActionListener如果的actionPerformed(ActionEvent的五)

這是如何從一個類的信息返回給另一個基本問題進行檢查。簡單的答案是提供一個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以獲取選定的值(或者如果用戶通過關閉了對話框,則返回null [X]按鈕

還有一步,如何檢查我在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); 
+0

作爲輸出我總是得到機器人,無論我選擇(爲x我得到空)?我在ModalDialog類裏面枚舉了枚舉,你寫的我也加入了ModalDialog的ActionPerformed方法,最後一部分代碼在main裏。 –

+1

對不起,在Swift中寫了一個'switch'語句的不同方法,檢查update – MadProgrammer

相關問題