gpt4 book ai didi

java - 画一个汽车轮子

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:33 25 4
gpt4 key购买 nike

我有一个非常简单的问题。我正在学习Java,并被分配画一辆汽车。我在一个扩展 JPanel 的类中完成了这一切,并在 paintComponent() 中完成了绘图。

我意识到这是糟糕的面向对象编程,并决定尝试对某些部分进行子类化以纠正这种情况。

我尝试创建一个画轮子的类,但没有成功。

本质上,我希望能够做到这一点:

Main Class extends JPanel

paintComponent{
Wheel leftWheel = new Wheel(0, 50, 100);
this.add(leftWheel);
}

这应该在 JPanel 中的点 (0, 50) 处绘制一个轮子,其直径为 100。

但是,我不确定我应该如何控制 JPanel 中的定位。当我这样做时,轮子被绘制在我窗口的顶部中心。这就是我的 wheel 类的样子:

public class Wheel extends JComponent {

private int x, y, diameter;
private boolean clockwise;

Wheel(int x, int y, int size, boolean cw)
{
this.setPreferredSize(new Dimension(size, size));
this.x = x;
this.y = y;
diameter = size;
clockwise = cw;
repaint();
}

public void paintComponent(Graphics canvas)
{
super.paintComponent(canvas);
canvas.setColor(Color.gray);
canvas.fillOval(x,y,diameter,diameter);
}

}

x 和 y 应该在它出现在父窗口的位置,但是,在下面的代码中不是这样(位于扩展 JFrame 的父类中):

Wheel leftWheel = new Wheel(0,0,WHEEL_DIAMETER,true);
this.add(leftWheel);

滚轮不是绘制在我窗口的左上角,而是绘制在我窗口顶部的中央。我做错了什么吗?抱歉,如果我不遵循一些 Java 约定,我还没有任何经验。这是我应该如何处理车轮的绘图,还是有更可接受的做法来进行这种类型的绘图?

例如,在我的JPanel 类中,如果我添加以下代码:

Wheel x = new Wheel(50,60,75,true);
this.add(x);

我得到一个尺寸为 75x75 的框架,其中在 that 框架内的点 (50,60) 处绘制了一个轮子(尺寸为 75x75),而不是在父级 JPanel 内的坐标系。结果是一个被剪裁的圆圈,我只看到圆圈的左上角。该图像显示在我的 JPanel

的顶部中心

我了解如何绘制轮子并在其内部移动它,但如何将轮子定位在 JPanel 上??

最佳答案

你的构造函数有一个小错误,

Wheel(int x, int y, int size, boolean cw) {
this.setPreferredSize(new Dimension(size, size));
diameter = size;
clockwise = cw;
repaint();
}

您忘记存储 xy。我想你想要,

Wheel(int x, int y, int size, boolean cw) {
this.x = x;
this.y = y;
this.setPreferredSize(new Dimension(size, size));
diameter = size;
clockwise = cw;
repaint();
}

因为你的xy不设置的话都是0。

关于java - 画一个汽车轮子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25921445/

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