2013-03-24 35 views
2

好,所以我一直试图找出过去26小时的指导和在线帮助,但没有成功。覆盖paintComponent

所有我想要做的就是绘制一个椭圆当PaintPanel 用户点击请人帮忙,所以我可以睡:P

screen

在PaintApplet类:

private void PaintPanelMouseClicked(java.awt.event.MouseEvent evt) {           
    // TODO add your handling code here: 
    if(FillRadioButton.isSelected()) 
    { 
    PaintPanel.setBackground(JColor.getColor()); 
    PaintPanel.repaint(); 
    } 
    if(BrushRadioButton.isSelected()) 
    { 
     Point ComponentPoint = PaintPanel.getLocationOnScreen(); 
     PaintPanel.add(new Painter(ComponentPoint)); 
    } 
}   

画家类别:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.*; 

public class Painter extends JPanel{ 

Point Component; 

public Painter(Point Com) 
{ 
    Component = Com; 
} 

public void paintComponent(Graphics g) 
{ 

     super.paint(g); 
     Point CursorPoint= MouseInfo.getPointerInfo().getLocation(); //gets cursorpoint 

     int ComPX = Component.x; 
     int ComPY = Component.y; 
     int CurPX = CursorPoint.x; 
     int CurPY = CursorPoint.y; 
     int FinalX = CurPX - ComPX; 
     int FinalY = CurPY - ComPY; 

     g.drawOval(FinalX, FinalY, 20, 20); 




} 
} 
+2

请尊重的Java命名约定。你的代码很难阅读。 – 2013-03-24 18:22:36

+0

通过查看您的代码,我认为您需要将Graphics g投射到Graphics2D – 2013-03-24 18:25:01

+0

另外,请告诉我们您期望此代码执行的操作,以及它代之以做什么。 – 2013-03-24 18:28:24

回答

3

请勿拨打

super.paint(g); 

范围内paintComponent。这将导致涂料链机制中的无限循环。相反,你需要

super.paintComponent(g); 

为了更好地帮助越早考虑发布一个SSCCE