2012-04-07 43 views
0

我無法獲取我在動作偵聽器中指定的字符串的值。如何從actionListener中獲取一個字符串?

我想從這個動作監聽器訪問UserMessage:

public class UpdateButtonListener implements ActionListener 
{ 

    public void actionPerformed(ActionEvent e) 
    {  
     String UserMessage; 
     UserMessage = MessageTextArea.getText(); 
     System.out.println("This is your message: " + UserMessage); 
    } 
} 

然後從這個ActionListener的訪問:

private class EncodeButtonListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     //print Message 
     System.out.println("Your Message: " + UserMessage); 
    } 
} 

他們是在同一個包不同的類別。 如果需要,我可以添加完整的代碼。

感謝

額外的信息: 當我點擊了無論是編碼或解碼按鈕我希望發生的。 動作偵聽器運行這些按鈕以訪問更新按鈕上的動作偵聽器。 我有更新按鈕的原因是爲了獲取用戶輸入的文本。

+0

您是否想從UpdatePuttonListener的actionPerformed方法訪問ActionPerformed的DecodeButtonListener的私有字段?只是你不能,除非你聲明變量最外面的兩個類......也許我不明白這個問題,你能解釋得更好嗎? – aleroot 2012-04-07 09:29:58

+0

你所需要的基本上是對MessageTextArea的引用,我想我們需要看到結構才能正確回答 – SelimOber 2012-04-07 09:31:10

+0

如果發佈了所有代碼,它會有幫助嗎? – 2012-04-07 09:46:55

回答

0

我認爲這是一個範圍問題。 UserMessage的作用域在actionPerformed內。

嘗試在actionPerformed之外聲明「String UserMessage」,然後可以將其公開,在這種情況下,爲了訪問它,您應該寫入「UpdateButtonListener.UserMessage」,或者創建一個返回UserMessage值的函數。

+0

在哪個actionListener? – 2012-04-07 09:56:07

0

我推薦這個:只需使用ActionListerns來調用方法!

public ActionPanel() { 
    // Actions 
    private final Action aEncode = new AbstractAction("Encode") { 
     public void actionPerformed(ActionEvent event) { 
      encodeMessage(); 
     } 
    } 
    private final Action aUpdate = new AbstractAction("Update") { 
     public void actionPerformed(ActionEvent event) { 
      setMessage(messageTextArea.getText()); 
     } 
    } 

    // Buttons 
    private final JButton encodeButton= new JButton(aEncode); 
    private final JButton updateButton= new JButton(aUpdate); 
    private final JTextArea messageTextArea= new JTextArea(); 

    private String message; 

    public ActionPanel() { 
     //Create two rows and one column 
     setLayout(new GridLayout(2,1)); 

     //Add border to panel 
     setBorder(BorderFactory.createTitledBorder("Excute")); 

     //Add button to panel 
     add(encodeButton); 
     add(updateButton); 
     //add(messageTextArea); 
    } 

    private void encodeMessage() { 
     System.out.println("Your Message: " + message.getMessage()); 
    } 

    private void setMessage(String message) { 
     this.message = message; 
     System.out.println("This is your message: " + message); 
    } 

    public String getMessage() { 
     retuen this.message; 
    } 
} 
+0

謝謝我改變了我的代碼,以適應你的,但它仍然沒有拿起該地區更新的消息。 – 2012-04-07 11:28:33

+0

對不起,我在路上。現在我希望你需要的代碼。就像我已經告訴過你的:不要用監聽器來做東西,他們只應該調用類(模型)中的方法。 – 2012-04-07 15:23:08

相關問題