0

アクション リスナー内で指定した文字列の値を取得できません。

このアクションリスナーから 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);
    }
}

それらは同じパッケージ内の異なるクラスにあります。必要に応じて、完全なコードを追加できます。

ありがとう

追加情報: 私がしたいのは、[エンコード] または [デコード] ボタンをクリックしたときです。これらのボタンから実行されるアクション リスナーは、更新ボタンのアクション リスナーにアクセスします。更新ボタンがあるのは、ユーザーが入力したテキストを取得するためです。

4

2 に答える 2

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;
    }
}
于 2012-04-07T10:34:18.053 に答える
0

範囲の問題だと思います。UserMessage のスコープは actionPerformed 内にあります。

actionPerformed の外側で "String UserMessage" を宣言してみてください。パブリックにすることができます。この場合、それにアクセスするには "UpdateButtonListener.UserMessage" を記述する必要があります。または、UserMessage の値を返す関数を作成します。

于 2012-04-07T09:37:40.683 に答える