java - 设置其他方法识别的变量

标签 java variables scope

这是我的第一篇文章,我对编程非常陌生(自学)。如果我的术语不完全符合标准或者我有任何其他失礼,请原谅我。我正在尝试编写一个使用两个类的程序,以便获取用户输入并使用该输入在屏幕上绘制一个简单的矩形。我已经让一切正常工作,但我无法识别用户生成的内容。我定义了一个“x”变量,用户为其输入一个值,但该值每次都作为“0”传递。系统会提示用户输入一个整数值,该值将在创建填充矩形时用作“x”值。但运行时,x 值始终为“0”。不知何故,变量“x”没有更改为用户输入的值。

下面是我的代码,尽管可能很糟糕。希望有人能给我一些想法。

主类

import javax.swing.JFrame;
import java.awt.*;
import java.util.*;

public class first {


    public static void main(String[] args) {

        second p = new second();
        p.setValues();
        p.getX();
        JFrame j = new JFrame("New Rectangle");
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        second t = new second();
        j.add(t);
        j.setSize(500,500);
        j.setVisible(true);


    }

}

第二类

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class second extends JPanel{
     int x;

    public void setValues()
    {
        Scanner s = new Scanner(System.in);
        System.out.println("Enter the X value");
        x = s.nextInt();

    }



    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        this.setBackground(Color.WHITE);

        System.out.println(x);
        g.setColor(Color.BLUE);
        g.fillRect(x, 20, 50, 50);

    }
}

最佳答案

看起来问题是您使用名为 p 的变量引用的对象收集信息,但随后使用变量 t< 引用的对象绘制到屏幕上。变量不会在类之间共享,除非它们是静态的 - 请查看此文档以获取更多信息。

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

帮助可视化这一点的一种方法是将类视为蓝图。您正在描述数据的外观以及如何使用它。当您准备好根据蓝图构建某些内容时,可以使用 new 关键字。此时,您将拥有一个基于蓝图描述的新对象,即类文件。

举一个现实世界的例子:如果您有某种类型房屋的蓝图,并且您和我都完全按照该蓝图的规范 build 了我们的房屋,则可以说我们拥有相同的房屋。但事实上,我们不这样做;如果我有 20 只猫,我的房子发臭,你的房子就不会发臭。我们的平面图是相同的,但我们每间房子的内部实际情况却截然不同。

要使代码正常工作,只需删除 t 变量,然后调用 j.add(p);

编辑:添加更多细节。该值始终为 0 的原因是 Java 在首次初始化时为基本类型选择了默认值。对于整数,默认值为 0。

关于java - 设置其他方法识别的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18424352/

相关文章:

javascript - 我如何构建这些回调来获取我想要的信息?

javascript - Javascript 中的 block 作用域、函数作用域和局部作用域

java - 我的 OutputStream 出现错误

Java 锁概念在内部是如何工作的?

java - 如何处理 Apache Curator 分布式锁连接丢失

java - 是否可以将上标添加到 JLabel html 中的上标?

actionscript-3 - 声明为 * (star) 类型的 Actionscript 变量

java - 在Java中,如果没有传递参数,如何为变量number=Integer.parseInt(args[0])赋值?

python - Python脚本之间的通信

c++ - 将通过引用传递的值分配给成员变量(在 C++ 中)