2010-02-08 82 views
2

任何人都知道如何在一個克隆JPanel中重畫。我使用克隆,所以我可以REPAINT()一個,而另一個會自動執行相同的操作。如何在CLONE JPanel中繪製paint()?

我的代碼只繪製了原來的JPanel,如果我在原來的或克隆面板移動鼠標,

,但如果我在克隆面板移動鼠標,此JPanel不畫。

在此先感謝

CODE:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


public class ProcessorClone { 

    public static void main(String[] args) { 

    JFrame aWindow = new JFrame(); 
    aWindow.setBounds(300, 200, 300, 100); 
    aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Container content = aWindow.getContentP 
    aWindow.setVisible(true); 

    CardViewer panel02=new CardViewer(); 
    CardViewer panel01= (CardViewer) panel02.clone(); 

    aWindow.setLayout(new BorderLayout()); 

    aWindow.add(panel01,BorderLayout.NORTH); 
    aWindow.add(panel02,BorderLayout.SOUTH); 

    panel01.setBackground(Color.RED); 
    panel02.setBackground(Color.blue); 

    panel01.repaint(); 
    panel02.repaint(); 

    panel01.validate(); 
    panel02.validate(); 

    } 
    } 

class CardViewer extends JPanel implements MouseListener,MouseMotionListener, Cloneable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private JPanel mContentPaneBorder; 
    private JPanel mContentPane; 
    private JButton FileButton=new JButton("AAA"); 
    private Point p; 

    public CardViewer(){ 
     super(); 
     this.add(FileButton); 


    addMouseListener(this); 
    addMouseMotionListener(this); 

    } 
    @Override 
    public void mouseClicked(MouseEvent arg0) { 
     System.out.println("mouseClicked"); 

    } 

    @Override 
    public void mouseEntered(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseExited(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mousePressed(MouseEvent arg0) { 
     System.out.println("mousePressed"); 
     p = null; 
     repaint(); 
    } 

    @Override 
    public void mouseReleased(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseDragged(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     System.out.println("mouseMoved"); 
     p = e.getPoint(); 
     this.repaint(); 
     this.validate(); 
    } 

    public void paint(Graphics g) { 
     System.out.println(g.getClass()); 
      if (p != null) { 
       Dimension d = getSize(); 
       int xc = d.width/2; 
       int yc = d.height/2; 
       g.drawLine(p.x, p.y, p.x, p.y); 
       this.setBackground(Color.pink); 
      } 

    } 
     public Object clone() { 

      // First make exact bitwise copy 
      CardViewer copy = null; 
     try { 
      copy = (CardViewer)super.clone(); 
     } catch (CloneNotSupportedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


      return copy; 
      } 
} 

回答

1

.clone()不返回JPanel的一面鏡子,但返回對象的副本,讓您真正擁有2個獨立的JPanel對象,因此行動在一個將不會自動反映在其他。

你可以重寫,調用超()

+0

你可以給我一個之後,從繼承的JPanel用參照.cloned()的JPanel對象,然後將所有的方法來其他的JPanel組件的所有動作例? – AcMe 2010-02-08 22:36:09