Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 将参数传递给动作侦听器 出身背景_Java - Fatal编程技术网

Java 将参数传递给动作侦听器 出身背景

Java 将参数传递给动作侦听器 出身背景,java,Java,我正试图编写一个程序,在这个程序中,用户键入一个格式公式 A?B:C?X-1:D?Y-3:Z*3 然后,代码将引导用户通过一系列是/否问题来确定在特定条件下返回的内容 问题 我已经写了一个findTrue代码,它将提取这种公式的真实部分。我想让我的yesListener的动作问另一个问题,如果用户输入的真实部分有更多的问号。如果没有,它将返回答案 ActionListener yesListener = new ActionListener() { @Ov

我正试图编写一个程序,在这个程序中,用户键入一个格式公式

A?B:C?X-1:D?Y-3:Z*3

然后,代码将引导用户通过一系列是/否问题来确定在特定条件下返回的内容

问题 我已经写了一个findTrue代码,它将提取这种公式的真实部分。我想让我的yesListener的动作问另一个问题,如果用户输入的真实部分有更多的问号。如果没有,它将返回答案

        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还是相当陌生,我正在努力探索如何实现这一点。

U不能直接将参数传递给匿名函数。 但是这个链接可能会帮助你做到这一点

据我所知,ActionListener是在某个类的范围内创建的。在没有看到类的全部代码的情况下,很难提出重构代码的最佳方法

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

公共班机{ 私有字符串公式; ActionListener yesListener=新建ActionListener{ @凌驾 公共无效诉讼执行事件e{ 如果公式==null{ 公式=textArea.getText; } int i=StringUtils.countMatchesformula?; 如果i>1{ 公式=findTrueformula; questionLabel.setTextaskQuestionformula; }否则{ questionLabel.settExt公式将返回+findTrueformula; } } };
请阅读并相应地增强您的问题。很可能,这段代码不足以告诉您问题的原因。我不确定我还可以添加哪些内容,而不是多余的内容。我的代码的其他工作方式并不真正重要,只是这样,每次调用了e action。再次看了一遍,再加上思考了我在本周初级开发人员的工作中看到的一些事情,我认为我试图在GUI本身中编写太多的代码。我将尝试更具逻辑性地重新编写这篇文章,并在必要时提出一个更好的问题。