gpt4 book ai didi

java - 将参数从 JPanel 传递到 JFrame

转载 作者:行者123 更新时间:2023-12-01 15:10:32 25 4
gpt4 key购买 nike

我遇到了一个问题,但不知道如何解决。我现在正在读(JAVA如何编程第9版)。我的应用程序(第 9 章,第 390 页)需要创建随机数量的具有不同颜色的不同形状,然后布局(JFrame)包含一个 JPanel - 它具有形状 - 和一个 JLabel - 它具有这些不同形状的数量。我创建了具有随机颜色的随机形状,但形状的数量无法正确传递给主方法。它总是显示0。

RandomShapes.java

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;

public class RandomShapes extends JPanel{

public int counter;
private Random random = new Random();

@Override
public void paintComponent(Graphics g){
super.paintComponent(g);

drawLines(g);
}

public void drawLines(Graphics g){
for(int i = 0 ; i < random.nextInt(20) ; i++){
g.setColor(generateColor());
g.drawLine(random.nextInt(getWidth()), random.nextInt(getHeight()), random.nextInt(getWidth()), random.nextInt(getHeight()));
counter++;
}

}

private Color generateColor(){
Color color = new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));

return color;
}

@Override
public String toString(){
return String.format("%d",counter);
}
}

RandomShapesTest.java

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class RandomShapesTest{
public static void main(String[] args){
RandomShapes shapes = new RandomShapes();
JFrame application = new JFrame();

JLabel status = new JLabel(shapes.toString());


application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

application.add(shapes);
application.setSize(600,600);
application.add(status, BorderLayout.NORTH);
application.setVisible(true);
}
}

顺便说一句,一个小技巧可能比完整的答案更有帮助:)

问候,,,

最佳答案

每次重新绘制时,计数器值都会递增。这意味着每当您调整窗口大小或执行其他触发重新绘制的操作时,您的计数器都会增加并显示错误的值。

但是,JLabel 当前显示 0,因为第一次重绘发生在您在 toString() 方法中读取计数值之后。

我建议您构建要在由 RandomShapes 构造函数调用的方法中绘制的对象。您构建一个 Line2D.Float 对象列表,然后在您的 Paint 方法中绘制线条。

关于java - 将参数从 JPanel 传递到 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12413447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com