【问题标题】:return value from Action Listener动作监听器的返回值
【发布时间】:2014-01-29 12:33:03
【问题描述】:

我有这个功能,我想在点击按钮时返回一个值。我知道它不起作用,但我该如何解决这个问题?我已经用谷歌搜索过,但找不到相关的东西。

我的代码:

public String OutputText()
{
    layout.show(mainpanel, "PANEL");
    testbutton.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent arg0) 
        {
            return textfield.getText();
        }
    });
}

【问题讨论】:

  • 为什么要函数返回值?
  • 你想用'returned'值做什么?
  • 所以这将起作用:'system.out.println(OutputText());例如:)
  • 为什么不直接在监听器内部做呢?

标签: java swing button return textfield


【解决方案1】:

您不能从 actionPerformed() 返回值,即使可以,它也不会影响您的 OutputText() 方法返回的内容。当您运行OutputText() 时,它会在按钮上添加一个ActionListener,但只有在按下按钮时才会异步调用该方法。这就是为什么在调用OutputText() 和调用actionPerformed() 之间可能会有很长的时间。

如果要显示文本字段中写入的内容,可以将System.out.println(textfield.getText()) 放入actionPerformed() 方法中。

【讨论】:

    【解决方案2】:

    可以使用CallBack方式,将返回值传递给Call back接口:

    public class TestCallBack {
        JButton testbutton;
    
    String value;
    
    public interface Callback {
        void setResult(String result);
    
    }
    
    public class MyCallBack implements Callback {
        @Override
        public void setResult(String result) {
            value = result;
        }
    }
    
    public static abstract class MyActionListener implements ActionListener {
        private Callback callback;
    
        public MyActionListener(Callback callback) {
            this.callback = callback;
        }
    
    }
    
    public String OutputText() {
        layout.show(mainpanel, "PANEL");
    
        testbutton.addActionListener(new MyActionListener(new MyCallBack()
    
        ) {
            public void actionPerformed(ActionEvent arg0) {
    
                this.callback.setResult(textfield.getText());
    
    
            }
        });
    }
    

    }

    【讨论】:

      【解决方案3】:

      您不能从 void 方法返回值。但是,您可以将其打印出来。或者,您可以调用一个返回值的方法,例如:

      public String returnStringValue(){
      return textfield.getText();
      }
      public void actionPerformed(ActionEvent arg0) {
      
      lblAnotherlabel.setText(returnStringValue);
         }
      

      但是,如果您可以直接实现这一点,为什么还要这样做呢?

      【讨论】:

        猜你喜欢
        • 2021-07-02
        • 2013-12-24
        • 2017-10-30
        • 2015-11-30
        • 1970-01-01
        • 2011-09-26
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多