2013-12-14 92 views
0

我正在嘗試創建一個可以在其中繪製的畫布以及一個將畫布置於空狀態的按鈕。 但是使用BorderLayout我的按鈕被複制,第二個是第一個的圖像副本,但它看起來不太好。 我的代碼有什麼問題,它如何修復。BorderLayout重複按鈕

PaintCanvas.java

import javax.swing.* ; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.border.*; 
class framakryesore extends JFrame { 
    PaintCanvas p1 = new PaintCanvas(); 
    JButton b1 = new JButton ("Reset"); 
    public framakryesore(){ 


    b1.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e){ 
      clearcanvas(p1); 
      repaint(); 
     } 
    }); 

    this.add(b1,BorderLayout.NORTH);    
    this.add(p1,BorderLayout.CENTER); 




} 
    public void clearcanvas(PaintCanvas p){ 
     p.setX(0); 
     p.setY(0); 
    } 
} 
public class PaintCanvas extends JPanel { 
    private int x = 0 ; 
    private int y = 0 ; 
    public void setX(int x){ 
     this.x = x; 
    } 
    public void setY(int y){ 
     this.y = y; 
    } 
    public PaintCanvas() { 
    addMouseMotionListener(new MouseMotionListener() { 
     @Override 
     public void mouseDragged(MouseEvent e){ 
     x=e.getX(); 
     y=e.getY(); 
     repaint(); 
     } 
     public void mouseMoved(MouseEvent e){ 

     } 


    }); 

    } 
    @Override 
    protected void paintComponent (Graphics g){ 
     if (x==0 && y==0){ 
      super.paintComponent(g); 
     } 
     else 
     { 
     g.setFont(new Font("TimesRoman", Font.BOLD, 30)); 
     g.drawString(".", x, y); 
     } 

    } 


} 

PaintCanvasTest.java

import javax.swing.JFrame; 


public class PaintCanvasTest { 
public static void main(String args[]){ 
    framakryesore pikturo = new framakryesore(); 
    pikturo.setVisible(true); 
    pikturo.setSize(640, 480); 
    pikturo.setTitle("Pikturo"); 
    pikturo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


} 
} 

回答

1
if (x==0 && y==0){ 
    super.paintComponent(g); 

你應該總是調用super.paintComponent()。在您進行自定義繪畫之前,它負責清除面板的背景。

+0

如果我調用super.paintComponent方法()通常比繪製圖案dissapear親愛的朋友。 – Lind

+0

@Lind,它會繪製paintComponent()方法中的任何東西。如果你正在嘗試增量繪畫,那麼你需要一個List來跟蹤所有你想繪畫的東西。查看[自定義繪畫方法]中的DrawOnComponent.java示例(http://tips4java.wordpress.com/2009/05/08/custom-painting-approaches/),其中顯示瞭如何執行此操作的示例。 – camickr

+0

我會確保閱讀這個例子。你能告訴我關於我上面的問題的任何事嗎,或者它對你工作正常嗎? – Lind