2012-04-07 7 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); 
    } 
} 

Они находятся в разных классов в одном пакете. При необходимости я могу добавить полный код.

Благодаря

Дополнительно: То, что я хочу, чтобы это произошло, когда я нажал либо Encode или кнопку Decode. Слушатель действия, запускающий эти кнопки для доступа к прослушивателю действий на кнопке обновления. Причина, по которой у меня есть кнопка обновления, - это получить текст, введенный пользователем.

+0

Вы хотите получить доступ к закрытому полю метода actionPerformed из UpdateButtonListener из actionPerformed из DecodeButtonListener? Просто вы не можете, если вы не объявите переменную outermost двух классов ... Может быть, я не понимаю вопроса, можете ли вы объяснить лучше? – aleroot

+0

Что вам нужно, это в основном ссылка на MessageTextArea, я думаю, нам нужно, чтобы структура правильно отвечала – SelimOber

+0

Помогло бы, если бы разместил весь код для обоих? –

ответ

0

Я думаю, что это проблема с объемом. Область UserMessage находится внутри actionPerformed.

Попробуйте объявить «String UserMessage» вне actionPerformed, а затем либо вы можете сделать его общедоступным, и в этом случае для доступа к нему вы должны написать «UpdateButtonListener.UserMessage», или вы создадите функцию, которая возвращает значение UserMessage ,

+0

В каком actionListener? –

0

Я рекомендую это: просто используйте ActionListterns для вызова методов!

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

Спасибо, что я немного изменил свой код, чтобы удовлетворить ваши потребности, но он по-прежнему не поднимает обновленное сообщение из области. –

+0

Извините, я был в дороге. Теперь я надеюсь, что код вам нужен. Как я уже сказал вам: не используйте прослушиватель для работы, они должны только вызывать методы из класса (модели). –