gpt4 book ai didi

java - 如何将椭圆形移动到鼠标单击的坐标?

转载 作者:行者123 更新时间:2023-12-01 06:03:17 26 4
gpt4 key购买 nike

我正在尝试用 Java OOP 构建一个小程序,它将显示一个椭圆形,该椭圆形将其位置更改为鼠标单击坐标。但是,由于我是初学者,我不知道如何完成它。

有人知道我的程序出了什么问题吗?

public class OvalWindow {

JFrame window;
int windowWidth = 500;
int windowHeight = 500;

OvalPanel panel;

public void run() {
//Set a window
window = new JFrame("Oval moving");
window.setVisible(true);
window.setSize(windowWidth, windowHeight);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Create a panel and add it to the window
panel = new OvalPanel();
window.setContentPane(panel);

//Change the location on mouse input
panel.addMouseListener(new OvalMouseClick(panel));


}

public static void main(String[] args) {
OvalWindow oWndow = new OvalWindow();
oWndow.run();
}

}

文件:Oval.java创建一个 Oval 类

 public class Oval {

private int diameter;
private int x;
private int y;
private Color color;

public Oval(int x, int y, int diameter, Color color) {
this.x = x;
this.y = y;
this.diameter = diameter;
this.color = color;
}

public int getX() {
return x;
}
public int getY() {
return y;
}
public int getDiameter() {
return diameter;
}
public Color getColor() {
return color;
}

/*
* Draw the oval
*/
public void draw(Graphics g) {
g.fillOval(x, y, diameter, diameter);
g.setColor(color);

}
}

文件:OvalPanel.java此类将椭圆形对象添加到屏幕上。另外,设置椭圆的初始位置

    public class OvalPanel extends JPanel{
Oval oval;

public void addOval(Oval oval) {
oval = new Oval(100, 100, 50, Color.BLACK);
this.repaint();

}
public void paintComponent(Graphics g){
oval.draw(g);
}


}

文件:OvalMouseClick.java该类在屏幕上添加一个新的椭圆,位置与鼠标单击的坐标相同。

    public class OvalMouseClick extends MouseAdapter{
OvalPanel panel;

public OvalMouseClick(OvalPanel panel) {
this.panel = panel;
}


@Override
public void mouseClicked(MouseEvent e) {
panel.addOval(new Oval(e.getX(), e.getY(), 50, Color.BLUE));

}

}

最佳答案

编写自定义 paintComponent() 方法,使您的 OvalPanel 实际显示某些内容。如果您向其中添加了组件,它们会自动显示,但您的 Oval 类不是组件(在 UI 意义上),因此您需要显式编写代码来显示它们。

@Override
public void paintComponent(Graphics g) {
for(Oval o : ovals)
o.draw(g);
}

我还建议阅读 https://docs.oracle.com/javase/tutorial/uiswing/ 上的 Swing 跟踪。因为你不能只是“猜测”事情是如何运作的。 Swing 很复杂,您需要了解它的作用。然后您将意识到 draw(Graphics g)paintComponent(Graphics g) 不仅仅是具有不同名称的类似方法。

关于java - 如何将椭圆形移动到鼠标单击的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51935078/

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