gpt4 book ai didi

java - JPanel 上的椭圆形不会在不同位置绘制

转载 作者:行者123 更新时间:2023-12-02 11:42:07 25 4
gpt4 key购买 nike

我有一个面板,每次按下鼠标按钮时,我都必须在上面画球。球应该绘制在鼠标按下的位置。

球画得很好,但是它们每次都画在同一位置,所以除非我左右“移动”窗口,否则不会看到绘制的球。

这是我的代码:

GUIBalls

public class GUIBalls {
public JFrame frame = new JFrame("Balls");
public JPanel panel = new JPanel();
private ArrayList<Ball> b = new ArrayList<>();
private Random rnd = new Random();

public GUIBalls(){
setFrame();
//moveBalls();
}
public void setFrame(){
this.frame.setBounds(0,0,400,400);
this.frame.add(panel);
panel.setBounds(0,0,400,400);
this.panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}

@Override
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
createBalls(x,y);
}

@Override
public void mouseReleased(MouseEvent e) {
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}
});
}
public void createBalls(int x, int y){
Ball ball = new Ball(x,y,10,10);
this.b.add(ball);
ball.draw(panel);
panel.repaint();
}
}

public class Ball extends JPanel {
int x;
int y;
int z;
int w;

public Ball(int x, int y, int z, int w) {
this.x = x;
this.y = y;
this.z = z;
this.w = w;
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(0, 0, z, w);

}

public void draw(JPanel panel) {
panel.add(this);
panel.setVisible(true);

}
}

由于某些奇怪的原因,球没有被绘制在不同的位置。

附上所发生情况的图片。 enter image description here enter image description here

有什么想法吗?

最佳答案

您的代码现在的问题是您同时尝试进行自定义绘画和尝试创建自定义组件。您需要决定要使用哪种方法。

有关自定义绘画的基础知识,请阅读 Custom Painting 上的 Swing 教程中的部分。有一个工作示例展示了如何做到这一点。好吧,它展示了如何在面板上绘制正方形,但您已经明白了。

如果您想继续添加要绘制的对象,那么您需要将对象保存在 ArrayList 中,然后在 PaintComponent() 方法中迭代该列表来绘制每个对象。此方法在Custom Painting Approaches中进行了演示。 .

如果您想创建一个球作为组件,那么您需要确保覆盖获取首选大小以返回球的大小。然后,您始终在面板的偏移 (0, 0) 处绘制椭圆形。然后,将 Ball 组件添加到使用空布局的父面板。由于您使用空布局,因此您将使用 setLocation(...) 方法将球定位在父面板上。您还需要使用 Ball 组件的 setSize() 方法来设置首选大小。

关于java - JPanel 上的椭圆形不会在不同位置绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48476000/

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