这是我的第一篇文章,我对编程非常陌生(自学)。如果我的术语不完全符合标准或我做任何其他失礼,请原谅我。我正在尝试编写一个程序,它使用两个类来获取用户输入并使用该输入在屏幕上绘制一个简单的矩形。我已经完成了所有工作,但我无法识别用户生成的内容。我已经定义了一个'x'变量,并且用户输入了一个值,但每次都会将该值传递为'0'。系统会提示用户输入一个整数值,该值将在创建fillrectangle时用作'x'值。但是,在运行时,x值始终为“0”。不知何故,变量'x'没有变为用户输入的值。
下面是我的代码,尽管它可能很差。希望有人可以给我一些想法。
MAIN CLASS
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);
}
}
答案 0 :(得分:1)
看起来问题是您使用名为p
的变量引用的对象收集信息,但随后使用变量t
引用的对象绘制到屏幕。除非它们是静态的,否则不会在类之间共享变量 - 请查看本文档以获取更多信息。
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
帮助可视化的一种方法是将Class视为蓝图。您将描述数据的外观以及它将如何使用。当您准备好从蓝图中构建内容时,请使用new
关键字。此时,您有一个新对象,基于您对蓝图的描述,即类文件。
使用现实世界的例子:如果你有某种类型的房子的蓝图,而你和我都根据这个蓝图的规格建造我们的房子,可以说我们拥有相同的房子。但实际上,我们没有;如果我有20只猫,我的房子有臭,你的房子不会发臭。我们的平面图是相同的,但我们每个房子里面的实际情况都非常不同。
要使代码生效,只需删除t
变量,然后调用j.add(p);
编辑:添加更多细节。值始终为0的原因是Java在首次初始化时为基本类型选择默认值。在整数的情况下,默认值为0。
答案 1 :(得分:0)
x值始终为0的原因是因为您在说
时正在创建它的另一个实例second t = new second(); //Creates a new instance of x (another copy of x)
如果您在System.out.print(p.x);
之后p.setValues()
,您将获得正确的x值。
就你的代码而言,我不太清楚p为什么存在的原因。只是做这样的事情应该有效:
JFrame j = new JFrame("New Rectangle");
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
second t = new second();
t.setValues();
j.add(t);
j.setSize(500, 500);
j.setVisible(true);