为了账号安全,请及时绑定邮箱和手机立即绑定

将参数传递给动作监听器

将参数传递给动作监听器

达令说 2022-07-06 17:10:36
背景我正在尝试编写一个程序,其中用户输入格式公式A?B:C?(X-1):D?(Y-3):(Z*3)然后代码将引导用户通过一系列是/否问题来确定在某些条件下将返回什么。问题我已经编写了一个findTrue代码,它将提取这种公式的真实部分。如果用户输入的部分中有更多问号,我希望我yesListener的操作问另一个问题。true如果不是,它将返回答案。        ActionListener yesListener = new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                String formula = textArea.getText();                int i = StringUtils.countMatches(formula, "?");               if  (i>1) {                    String newFormula = "";                    newFormula = findTrue(formula);                    questionLabel.setText(askQuestion(newFormula));                }               else {questionLabel.setText("The formula will return" + findTrue(formula));}            }};我第一次运行代码时它工作正常,但第二次它从原始输入再次运行 getText()。所以,我认为最好的方法是如果我可以将字符串传递到actionPerformed而不是在内部评估它。但是,我对 java 还是很陌生,我正在努力了解如何实现这一点。
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

据我了解,您ActionListener是在某个类的范围内创建的。在不查看类的整个代码的情况下,很难提出重构代码的最佳方法。


但是为了实现您的目标,您可以将 的原始值保存getText()在类实例字段中,然后在侦听器的每次新调用中更新它:


public class Main {


    private String formula;



    ActionListener yesListener = new ActionListener() {

        @Override

        public void actionPerformed(ActionEvent e) {

            if (formula == null) {

                formula = textArea.getText();

            }

            int i = StringUtils.countMatches(formula, "?");

            if (i > 1) {

                formula = findTrue(formula);

                questionLabel.setText(askQuestion(formula));

            } else {

                questionLabel.setText("The formula will return" + findTrue(formula));

            }

        }


    };


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信