【问题标题】:Java swing : return value when button clickedJava swing:单击按钮时返回值
【发布时间】:2013-08-20 16:25:30
【问题描述】:

我正在尝试创建一个包含“生成”按钮的方法,该按钮允许您在单击按钮时向调用方法类返回一个值(字符串或其他)。 我试着这样做:

//start methode in "Generator" Class
public String start()
{
 String format = new String("");

        this.generateBtn.addActionListener(new ActionListener()
    {
        public String actionPerformed(ActionEvent arg0)
        {  
            //after doing operations on "format" string

                    return format;
        }

    });

我以这种方式从另一个类调用 start 方法:

Generator genDialog =new Generator();
String format = genDialog.start();

我在生成器类中遇到了这个错误:

返回类型与 ActionListener.actionPerformed(ActionEvent) 不兼容

我怎样才能实现我想做的事情? 当我点击里面的按钮时,我需要获得我调用的类的值。

【问题讨论】:

  • 这没有任何意义。如果用户从不点击怎么办?你想要一个承诺之类的东西。
  • 只需创建一个返回 String 的方法并从 actionPerformed() 方法内部调用此方法 :-) 您不能更改 actionPerformed() 方法的签名,它是一个接口,您必须在实现接口时定义,以遵守合同:-)

标签: java swing button return actionlistener


【解决方案1】:

看起来您的生成器类是一个对话框。如果它是模态对话框,则 setVisible(true) 方法将阻塞,直到对话框被隐藏。所以你的 generateBtn 动作监听器应该做的是将生成的字符串存储在一个成员变量中,然后调用 setVisible(false)。然后您的 start 方法设置调用 setVisible(true) 并返回值。

它看起来像这样。

 public class Generator  extends JDialog {
    private String format;
    private JButton generateBtn;

    public Generator () {
        setModal(true);
        generateBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // create format string
                setVisible(false);
            }
         });
    }

    public String start() {
        setVisible(true);
        return format;
    }
 }

【讨论】:

    【解决方案2】:

    你不能让actionPerformed() 返回一个字符串......而且我看不出你需要这样做的理由。我认为您可以在 actionPerformed() 内部的 format 上执行所需的任何操作。

    【讨论】:

      猜你喜欢
      • 2014-05-15
      • 2017-05-06
      • 2020-04-25
      • 2012-09-12
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多