当前位置: 首页 > 知识库问答 >
问题:

变量在同一作用域中调用时会产生多个值java

唐焕
2023-03-14

在Java Swing桌面应用程序中。我有一些较小的类,所有这些都在一个总体应用程序类中使用。其中一个较小的类是表示我的登录页面的JPanel。我在此页面的登录按钮中添加了一个mouselistener,如下所示:

Public class loginPage extends JPanel{
String username;
boolean capturedName=false;
JTextField nameField;

...

loginButton.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    username = nameField.getText(); 
                    capturedName=true;    //for redundant checking of mouse click event
                    System.out.println(username);    //error checking
                    System.out.println(capturedName);    //error checking
                }
            });
    }

在代表JFrame的一个单独的display类中,我将登录页面作为所述类的一个属性,并在将登录页面添加到app类之后,在app类中实例化这个display类。我正在尝试捕获App类中的登录页面用户名attr并将其传递给其他方法。但当我运行代码并单击login按钮时,textbox中的值不会被捕获。

//Set login page GUI up 

while(display.loginPage.username==null){ //this is initially true

        if (display.loginPage.capturedName){  //boolean to check if button has been clicked
            display.loginPage.username=display.loginPage.nameField.getText(); //intentional redundancy
            String username=display.loginPage.username; 
            System.out.print(username);
            //pass username to other methods
        }

        }

运行代码时,在username textfield上输入一个名称,然后单击login,键入的名称和capturedName布尔值的true值都会打印出来,但是

if (display.loginPage.capturedName)

条件永远不满足。另外,当我添加print display.loginpage.username时,我会得到一个空值。在相同的价值之间出现这种差异的原因是什么呢?

共有1个答案

章光华
2023-03-14

在相同的价值之间出现这种差异的原因是什么呢?

您可能有两个相同类型的对象,一个显示,其状态正在更改,另一个未显示,您正在if块中检查。

但是,为了获得更好的帮助,请考虑创建并发布一个最小的、完整的、可验证的示例程序。我们不想看到你的整个程序,但你应该把你的代码压缩成最小的部分,它仍然可以编译,没有与你的问题无关的额外代码,但仍然可以证明你的问题。顺便说一句,您永远不会希望像现在这样将MouseListener与JButton一起使用。相反,使用ActionListener,因为这正是构建它的目的。

 类似资料:
  • 我需要取回一个在未来的onSuccess块中被改变的变量。这是我的示例代码。 返回为无,不会变为,或。那么这是否意味着onSuccess块中变量的值无法返回?然而,这似乎奏效了: 我可以在未来的onSuccess块中做什么,以便根据未来的结果是整数还是字符串,将< code>ret的值返回为< code>1或< code>2?在这种情况下,scala的作用域规则是什么?(我用的是akka)。感谢任

  • 问题内容: 这是我学习python的第二天(我了解C ++和一些OOP的基础知识),并且我对python中的变量有些困惑。 这是我目前对它们的了解: Python变量是对对象(可变或不可变)的引用(或指针?)。当我们有类似的内容时,不可变对象将在内存中的某个位置创建,而名称- 对象引用对将在某个命名空间中创建。当我们拥有时,不会复制任何内容,但是现在两个变量都引用相同的对象,并被添加到相同的名称空

  • 变量作用域 变量的作用域值的是变量的生命周期和作用范围(全局与局部作用域的区别)。 作用域介绍 静态作用域 静态作用域有称为词法作用域,即指其在编译的阶段就可以决定变量的引用。静态作用域只更变量定义的位置有关与代码执行的顺序无关。 var x = 0; function foo() { alert(x); } function bar() { var x = 20; foo(); }

  • 任何编程中的范围都是程序的一个区域,其中定义的变量可以存在,并且超出该变量无法访问。 有三个地方,其中变量可以用Pascal编程语言声明 - 在子程序或块中,称为局部变量 在所有子程序之外,称为全局变量 在子程序参数的定义中称为形式参数 让我们解释什么是local和global变量和形式参数。 局部变量 (Local Variables) 在子程序或块内声明的变量称为局部变量。 它们只能由子程序或

  • 如果你之前用过像Python或者Ruby之类的动态语言,现在你可能已经熟悉了Vim脚本的变量。你会发现Vim变量的大部分内容跟你想的一样,不过有一个东西可能会不同,那就是变量的作用域。 在两个分隔的窗口中分别打开两个不同的文件,然后在其中一个窗口中执行下面的命令: :::vim :let b:hello = "world" :echo b:hello 如你所愿,Vim会显示world。现在切换到

  • 编程最简单的算法之一,莫过于变量交换。交换变量的常见算法需要一个中间变量进行变量的临时保存。用传统方法编写变量交换代码如下: 在计算机刚发明时,内存非常“精贵”。这种变量交换往往是非常奢侈的。于是计算机“大牛”发明了一些算法来避免使用中间变量: 这样的算法很多,但是都有一定的数值范围和类型要求。 到了Go语言时,内存不再是紧缺资源,而且写法可以更简单。使用 Go 的“多重赋值”特性,可以轻松完成变