gpt4 book ai didi

java - 为什么我不能用鼠标画圆圈?

转载 作者:行者123 更新时间:2023-12-02 06:18:24 25 4
gpt4 key购买 nike

我正在解决一个关于创建最接近的点对的练习。我正在做的第一个场景是尝试用鼠标做出一个点(cricles)。但我用左按钮没有任何反应(只有 (0,0) 中的一个圆圈),其他按钮 2 和 3 工作正常。我陷入了为什么以及如何解决这个问题?任何提示或帮助都是值得赞赏的。

这是代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ClosestPairOfPoints extends JFrame {
// Create a canvas
private Circle canvas = new Circle();

public ClosestPairOfPoints() {
// Create a panel
JPanel p = new JPanel();
// Add canvas and panel
add(canvas, BorderLayout.CENTER);
// add(p);

canvas.addMouseListener(new MouseAdapter() {
@Override
// Handle mouse clicked event
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1)
canvas.createCircle();
else if (e.getButton() == MouseEvent.BUTTON2)
System.out.println("Try again with the left button");
else if (e.getButton() == MouseEvent.BUTTON3)
System.out.println("Try again with the left button");
}
});

}

public static void main(String[] args) {
JFrame frame = new ClosestPairOfPoints();
frame.setTitle("Closest pair of Ppoints");
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}

static class Circle extends JPanel { // Inner class
private int x;
private int y;
private int radius = 10; // Default circle radius

// Create a circle
public void createCircle() {

}

// paint the component
protected void paintComponent(Graphics g) {

super.paintComponent(g);

g.drawOval(x, y, radius, radius);

}
}
}

最佳答案

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ClosestPairOfPoints extends JFrame {
// Create a canvas
private Circle canvas = new Circle();

public ClosestPairOfPoints() {
// Add canvas and panel
add(canvas, BorderLayout.CENTER);

canvas.addMouseListener(new MouseAdapter() {
@Override
// Handle mouse clicked event
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1){
canvas.createCircle(e.getX(), e.getY());
}else if (e.getButton() == MouseEvent.BUTTON2){
System.out.println("Try again with the left button");
}else if (e.getButton() == MouseEvent.BUTTON3){
System.out.println("Try again with the left button");
}
}
});

}

public static void main(String[] args) {
JFrame frame = new ClosestPairOfPoints();
frame.setTitle("Closest pair of Ppoints");
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}

static class Circle extends JPanel { // Inner class
private int x;
private int y;
private int radius = 10; // Default circle radius

// Create a circle
public void createCircle(int x, int y) {
this.x = x;
this.y = y;
repaint();
}

// paint the component
protected void paintComponent(Graphics g) {

super.paintComponent(g);

g.drawOval(x, y, radius, radius);

}
}
}

现在应该可以工作了。您需要调用 createCircle 并向其传递 mouseClick 的位置,然后调用 repaint,以便可以再次调用绘制组件并在正确的位置重绘圆圈。

哈哈,在我输入此内容时,似乎另一个人已经发布了答案。正如前面提到的,事件对象“e”包含有关鼠标单击的信息,因此使用 getX() 和 getY() 方法,您可以获得鼠标单击的 x 和 y 位置。

此外,您不需要 JPanel p = new JPanel();在您的代码中...因为“canvas”已经是一个 JPanel 并且是您添加到 JFrame 中的一个。

希望这有帮助

关于java - 为什么我不能用鼠标画圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247137/

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