java - 用Java画一个圆

标签 java swing paintcomponent jcomponent

我想画一个具有以下属性的圆:

  • 中心是用户在窗口上首次单击鼠标的点
  • 半径应该是鼠标第一次单击和释放(即鼠标拖动)之间的距离长度。

这是我到目前为止所拥有的,但它没有做我需要它做的事情:

package assignment;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;

public class DrawCircle extends JFrame implements MouseListener
{
    private int centerX;
    private int centerY;
    private int endPtX;
    private int endPtY;
    private double radius;
    private double w;
    private double h;
    private CirclePanel circPanel;

    /** constructor **/
    public DrawCircle() 
    {
        this.setTitle("Click to Draw Circle");
        this.setSize(500, 500);
        this.setPreferredSize(new Dimension(500, 500));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.setResizable(false);
        this.addMouseListener(this);
        this.circPanel = new CirclePanel();
        this.circPanel.setPreferredSize(new Dimension(500, 500));
        this.add(this.circPanel);
        pack();
    }

    public void mousePressed(MouseEvent e)
    {
        centerX = e.getX();
        centerY = e.getY();
        circPanel.set(centerX, centerY, radius, radius);
        repaint();
        pack();
    }

    public void mouseReleased(MouseEvent e)
    {
        endPtX = e.getX();
        endPtY = e.getY();

        radius = Math.sqrt(Math.pow(endPtX - centerX, 2) + Math.pow(endPtY - centerY, 2));
    }
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mouseClicked(MouseEvent e){}



    //circle panel
    private class CirclePanel extends JComponent
    {
        private int x;
        private int y;
        private int w;
        private int h;

        public void set(int x, int y, double width, double height)
        {
            this.x = x;
            this.y = y;
            w = (int) width;
            h = (int) height;
        }

        public void paintComponent(Graphics g)
        {
            g.drawOval(x, y, w, h);
        }
    }

    //main method
    public static void main (String [] args)
    {
        new DrawCircle();
    }
}

最佳答案

看起来你正在做

circPanel.set(centerX, centerY, radius, radius);
repaint();
pack();

在错误的位置,您不应该在用户放开鼠标之前绘制圆,因为那时半径已设置,在此之前半径为 0,因此没有绘制任何内容。尝试将其移至 mouseReleased 方法。

关于java - 用Java画一个圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218337/

相关文章:

java - 类作业出错

java - 映射条目的每个键的流,包含列表作为值

java - JTextArea 追加

java - GUI动画: Slider Value between Action and Change classes?

java - 在面板中排列项目

java - 带有图像的 fillRect 方法

java - 如何让 Action 更顺畅?

java.lang.NullPointerException 问题

Java Swing基本动画问题

java - 使用 slf4j 和 log4j2 动态添加 appender