Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从actionListener内部获取字符串?_Java - Fatal编程技术网

Java 如何从actionListener内部获取字符串?

Java 如何从actionListener内部获取字符串?,java,Java,我在获取动作侦听器中指定的字符串的值时遇到问题 我正在尝试从此操作侦听器访问UserMessage: public class UpdateButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { String UserMessage; UserMessage = MessageTextArea.getText();

我在获取动作侦听器中指定的字符串的值时遇到问题

我正在尝试从此操作侦听器访问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);
    }
}
它们在同一个包中的不同类中。 如果需要,我可以添加完整的代码

谢谢

额外信息: 我想要发生的是当我点击编码或解码按钮时。 运行这些按钮的操作侦听器可以访问更新按钮上的操作侦听器。
我之所以使用“更新”按钮是为了获取用户输入的文本。

我认为这是范围问题。UserMessage的作用域在actionPerformed内


尝试在actionPerformed之外声明“String UserMessage”,然后您可以将其公开,在这种情况下,为了访问它,您应该编写“UpdateButtonListener.UserMessage”,或者创建一个返回UserMessage值的函数。

我建议这样做:只需使用ActionListens调用方法

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;
    }
}

是否要从DecodeButtonListener的actionPerformed访问UpdateButtonListener的actionPerformed方法的私有字段?除非声明两个类中最外层的变量,否则您不能。。。也许我不明白这个问题,你能解释得更好吗?你需要的基本上是一个对MessageTextArea的引用,我想我们需要看到正确答案的结构。如果两个都发布了所有代码,会有帮助吗?“如果两个都发布了所有代码,会有帮助吗?”为了更快地获得更好的帮助,发布一个。我已经按照SSCCE编辑了这篇文章。我只想让EncodeButtonListener访问UserMessage的字符串值。我已经在actionListener之外运行了它,但我得到的唯一值是我在创建JTextArea时指定的原始值。谢谢,为了适应您的需要,我对代码进行了一些更改,但它仍然无法从该区域获取更新的消息。抱歉,我正在路上。我希望现在你需要的代码。就像我已经告诉过你的:不要使用listener来做事情,他们应该只调用类(模型)中的方法。