2013-03-24 37 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