2017-03-05 41 views
-2

我有一个图形用户界面,我画。无论我在鼠标图案上做了什么,都会在每行除以两行的区域重复。但是,我可以这样做,因为我的paintComponen方法不会调用super.paintComponent。如果我实际上调用方法,每当我拖动鼠标时,我只会得到一个点。我应该如何去做呢?Java Graphics2D鼠标图案绘图

enter image description here

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; 
    } 

} 


} 

回答

1

super.paintComponent()擦除绘制前/清除区域,所以你只看到这一点,你的电流消耗。

如果要绘制拖动的鼠标线,则必须将每个绘制的坐标存储在列表中,然后在paintComponent()中再次绘制所有点。请注意,这个列表可能会变得非常大,因此会吃掉很多内存,所以您应该考虑以某种方式限制它。

+0

最后一个足够的答案。干杯! –