这是我的第一篇文章,我对编程非常陌生(自学)。如果我的术语不完全符合标准或者我有任何其他失礼,请原谅我。我正在尝试编写一个使用两个类的程序,以便获取用户输入并使用该输入在屏幕上绘制一个简单的矩形。我已经让一切正常工作,但我无法识别用户生成的内容。我定义了一个“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/