将变量从 JFrame 传递到 JPanel?
Passing variable from JFrame to JPanel?
现在我花了大约一个小时在网上搜索解决方案,但我看到的解决方案对我来说似乎过于复杂,或者根本没有解决方案。我是一名学生,所以我对编码还很陌生,所以请原谅我缺乏这方面的知识。但是这个问题困扰我的时间比我认为的要长。
经过搜索,我决定在 JFrame 中放置一个方法,该方法只是 returns 表示变量。
然后在 JPanel 中我将调用此方法并将其分配给一个变量。然后使用该变量绘制椭圆。然而,这不起作用或更多,所以我认为它没有收到价值,因为 Eclipse 没有显示任何问题。我尝试将 getter 方法调用放置在“x”所在的位置,但什么也没有。虽然当把常量放在像“50”这样的地方时,它会打印一个圆圈。
我这样做对吗??如何将值从 Jframe 传递到 Jpanel?
代码:
public class circ {
public static void main(String[] args)
{
circMain cM = new circMain();
cM.setSize(600, 600);
cM.setVisible(true);
}
}
jframe:
public class circMain extends JFrame {
private circRan circRan;
private calcBox calcBox;
double x = Math.random()*100;
double y = Math.random()*100;
int xfinal = (int)x;
int yfinal = (int)y;
public circMain() {
super("Random Circle");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
circRan = new circRan();
calcBox = new calcBox();
pack();
setVisible(true);
add(circRan, BorderLayout.NORTH);
add(calcBox, BorderLayout.SOUTH);
}
public int getX() {
return xfinal;
}
public int getY() {
return yfinal;
}
}
jpanel:
public class circRan extends JPanel {
int x = getX();
public void paint(Graphics g)
{
super.paint(g);
g.drawOval(50, 50, x, x);
setSize(300,300);
}
}
编辑第 2 天-get 方法(在 circMain 中):
public int getX() {
return xfinal;
}
然后我把这个放在circRan:
int x = getX();
仍然没有.. Welp 任务将在今天结束前完成,感觉解决方案很简单,我通常会错过它.. 而且它会加重。
行
int x = getX();
相当于
int x = this.getX();
即您的 class 变量 circRan.x
将获得调用函数 getX()
为 class circRan
声明的 return 值,该函数为 [=15] 声明=], JPanel
.
的超级class
你想要实现的是调用为 circMain
的实例声明的函数(顺便说一下,它会覆盖 JFrame
s superclass 声明的 getX()
Component
).为此,您需要 circMain
的实例,您想要这个值。
或者,如果 circMain
的所有实例共享此值(或者如果只存在一个实例),您可以声明 x
、xfinal
和 getX()
static
。然后你可以调用circMain.getX()
,直接在class上调用静态函数而不是实例。不过,这取决于您的用例。
现在我花了大约一个小时在网上搜索解决方案,但我看到的解决方案对我来说似乎过于复杂,或者根本没有解决方案。我是一名学生,所以我对编码还很陌生,所以请原谅我缺乏这方面的知识。但是这个问题困扰我的时间比我认为的要长。
经过搜索,我决定在 JFrame 中放置一个方法,该方法只是 returns 表示变量。
然后在 JPanel 中我将调用此方法并将其分配给一个变量。然后使用该变量绘制椭圆。然而,这不起作用或更多,所以我认为它没有收到价值,因为 Eclipse 没有显示任何问题。我尝试将 getter 方法调用放置在“x”所在的位置,但什么也没有。虽然当把常量放在像“50”这样的地方时,它会打印一个圆圈。
我这样做对吗??如何将值从 Jframe 传递到 Jpanel?
代码:
public class circ {
public static void main(String[] args)
{
circMain cM = new circMain();
cM.setSize(600, 600);
cM.setVisible(true);
}
}
jframe:
public class circMain extends JFrame {
private circRan circRan;
private calcBox calcBox;
double x = Math.random()*100;
double y = Math.random()*100;
int xfinal = (int)x;
int yfinal = (int)y;
public circMain() {
super("Random Circle");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
circRan = new circRan();
calcBox = new calcBox();
pack();
setVisible(true);
add(circRan, BorderLayout.NORTH);
add(calcBox, BorderLayout.SOUTH);
}
public int getX() {
return xfinal;
}
public int getY() {
return yfinal;
}
}
jpanel:
public class circRan extends JPanel {
int x = getX();
public void paint(Graphics g)
{
super.paint(g);
g.drawOval(50, 50, x, x);
setSize(300,300);
}
}
编辑第 2 天-get 方法(在 circMain 中):
public int getX() {
return xfinal;
}
然后我把这个放在circRan:
int x = getX();
仍然没有.. Welp 任务将在今天结束前完成,感觉解决方案很简单,我通常会错过它.. 而且它会加重。
行
int x = getX();
相当于
int x = this.getX();
即您的 class 变量 circRan.x
将获得调用函数 getX()
为 class circRan
声明的 return 值,该函数为 [=15] 声明=], JPanel
.
你想要实现的是调用为 circMain
的实例声明的函数(顺便说一下,它会覆盖 JFrame
s superclass 声明的 getX()
Component
).为此,您需要 circMain
的实例,您想要这个值。
或者,如果 circMain
的所有实例共享此值(或者如果只存在一个实例),您可以声明 x
、xfinal
和 getX()
static
。然后你可以调用circMain.getX()
,直接在class上调用静态函数而不是实例。不过,这取决于您的用例。