将变量从 JFrame 传递给 JPanel?

问题描述

现在我花了大约一个小时在网上搜索解决方案,我看到的解决方案对我来说似乎太复杂了,或者根本没有解决方案。我是一名学生,所以我对编码还很陌生,所以请原谅我缺乏这方面的知识。但是这个问题困扰我的时间比我认为应该的要长。

搜索后,我决定在 JFrame 中放置一个方法,该方法只返回所述变量。

然后在 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();

仍然没有..今天结束时,我们将完成任务分配,感觉解决方案很简单,我通常会遗漏一些......而且它会加重。

解决方法

线

int x = getX();

相当于

int x = this.getX();

即您的类变量 circRan.x 将获得调用为类 getX() 声明的函数 circRan 的返回值,该函数是为 JComponent 声明的,JPanel 的超类。

您想要实现的是调用为 circMain 实例声明的函数(顺便说一下,它覆盖了由 getX() 的超类 JFrame 声明的 Component)。为此,您需要 circMain 的实例以获得此值。

或者,如果 circMain 的所有实例都共享此值(或者如果仅存在一个实例),您可以声明 xxfinalgetX() {{1} }.然后你可以调用static,直接在类而不是实例上调用静态函数。不过,这取决于您的用例。