2017-03-05 9 views
-2

私は描画するパネルを持つGUIを持っています。どのようなマウスパターンでも、2つの行で分けられたすべてのセクタで繰り返されます。しかし、私はpaintComponentメソッドがsuper.paintComponentを呼び出さないので、これを行うことができます。実際にメソッドを呼び出すと、マウスをドラッグするたびにポイントが1つしか得られません。それについてどうすればいいですか?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

最後に適切な答え。乾杯! –

関連する問題