将变量从 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 的实例声明的函数(顺便说一下,它会覆盖 JFrames superclass 声明的 getX() Component).为此,您需要 circMain 的实例,您想要这个值。

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