Java Graphics2D鼠标模式绘图

Java Graphics2D鼠标模式绘图,java,swing,graphics2d,Java,Swing,Graphics2d,我有一个GUI和一个面板,我在那里画。我所做的任何鼠标模式都会在被两条线分割的每个扇区中重复。但是,我能够做到这一点,因为我的paintComponen方法不调用super.paintComponent。如果我真的调用了这个方法,每当我拖动鼠标时,我只会得到一个点。我该怎么做呢 导入java.awt.Color; 导入java.awt.Graphics; 导入java.awt.Graphics2D; 导入java.awt.Point; 导入java.awt.event.MouseAdapter

我有一个GUI和一个面板,我在那里画。我所做的任何鼠标模式都会在被两条线分割的每个扇区中重复。但是,我能够做到这一点,因为我的paintComponen方法不调用super.paintComponent。如果我真的调用了这个方法,每当我拖动鼠标时,我只会得到一个点。我该怎么做呢

导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Point;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.geom.Line2D;
导入javax.swing.JPanel;
公共最终类DisplayPanel扩展了JPanel
{
私有布尔拖动;
私人点画;
专用线路2D扇区线路;
私营部门;
公共void init()
{
DisplayListener=新的DisplayListener();
addMouseListener(监听器);
addMouseMotionListener(listener);
set不透明(true);
挫折背景(颜色:黑色);
设置大小(900900);
setVisible(真);
}
//在显示面板上执行绘图
公共组件(图形g)
{
//超级组件(g);
挫折背景(颜色:黑色);
Graphics2D g2d=(Graphics2D)g;
g2d.setColor(Color.RED);
sectorLine=newline2d.Double(getWidth()/2,0,getWidth()/2,getHeight());
扇区=12;
//在屏幕上绘制扇区
对于(int i=0;i
super.paintComponent()
在绘制前擦除/清除区域,因此您只能看到当前绘制的点


如果要绘制鼠标拖动的直线,则必须将绘制的每个坐标存储在列表中,然后存储在
paintComponent()中
,再次抽取所有的分数。请注意,此列表可能会变得非常大,从而消耗大量内存,因此您可能应该考虑以某种方式限制它。

最后是一个适当的答案。干杯!
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import javax.swing.JPanel;

public final class DisplayPanel extends JPanel
{

private boolean dragging;
private Point draw;
private Line2D sectorLine;
private int sectors;

public void init()
{

    DisplayListener listener = new DisplayListener();

    addMouseListener(listener);
    addMouseMotionListener(listener);
    setOpaque(true);
    setBackground(Color.BLACK);
    setSize(900,900);
    setVisible(true);
}

//performs the drawing on the display panel
public void paintComponent(Graphics g)
{
    //super.paintComponent(g);

    setBackground(Color.BLACK);


    Graphics2D g2d = (Graphics2D) g;    
    g2d.setColor(Color.RED);

    sectorLine = new Line2D.Double(getWidth()/2, 0, getWidth()/2, getHeight());
    sectors = 12;

    //draws the sectors on the screen
    for(int i=0; i<sectors; i++)
    {   
        g2d.draw(sectorLine);
        g2d.rotate(Math.toRadians(30),getWidth()/2,getHeight()/2);
    }

    //draws the doilie
    if(dragging)
    {
        for(int i=0; i<sectors; i++)
        {
            g2d.fillOval((int) draw.getX(), (int) draw.getY(),20, 20);
            g2d.rotate(Math.toRadians(30), getWidth()/2, getHeight()/2);
        }

    }



}

private class DisplayListener extends MouseAdapter
{   
    public void mouseDragged(MouseEvent event)
    {
        dragging = true;
        draw = event.getPoint();
        repaint();
    }

    public void mouseReleased(MouseEvent event)
    {
        dragging = false;
    }

}


}