2012-03-12 13 views
5

Sto provando a creare un Mastermind in Java. Il codice non è molto difficile, ma voglio avere un'interfaccia molto buona. Ho un JPanel che prendono tutta la mia JFrame, e dipingo questo JPanel con surchargind repaint() metodo:Dipingere in una parte di JPanel senza ridipingere il resto

public void paint(Graphics g) //méthode permettant de dessiner les éléments sur la carte 
    { 
    super.paintComponents(g); 
    Graphics gr; 
    gr = MasterMindPane.getGraphics(); 

    img = MasterMindPane.getToolkit().getImage("images/plateau4-8.jpg"); 
    gr.drawImage(img, 0, 0, 600, 720, this); 

    gr = bouleRougePane.getGraphics(); 
    img = bouleRougePane.getToolkit().getImage("images/bouleRouge.png"); 
    //gr.drawImage(img, 535, 303, 45, 45, this); 
    gr.drawImage(img, 0, 0, 45, 45, this); 
    gr = bouleOrangePane.getGraphics(); 
    img = bouleOrangePane.getToolkit().getImage("images/bouleOrange.png"); 
    //gr.drawImage(img, 535, 303, 45, 45, this); 
    gr.drawImage(img, 0, 0, 45, 45, this); 
} 

Quando clicco su una sola immagine, che hanno un pannello, traggo un cerchio giallo del genere:

private void bouleRougePaneMouseClicked(java.awt.event.MouseEvent evt) {            
    Graphics2D g2d = (Graphics2D) MasterMindPane.getGraphics(); 

    for(int i = 0; i<4; i++) 
    { 
     g2d.setColor(Color.ORANGE); 
     g2d.setStroke(new BasicStroke(3)); 
     g2d.drawOval(78+i*70, 106+etape*50, 35, 35); 
    } 
}  

E quando seleziono un foro, voglio eliminare il cerchio, che indica solo dove il giocatore può giocare.

Ma non so come eliminare il cerchio, o ridipingere solo una parte della mia immagine, perché costa molto ridipingere tutto.

+0

Hai provato a invocare il metodo 'repaint (Rectangle r)'? –

+0

Sì, ho provato ma ridisegno (Rettangolo r) cancella tutte le mie immagini e ridisegno solo la parte specificata nel rettangolo – algelos

+0

Cosa vuoi dire cancella tutte le tue immagini? Lo scopo dell'uso di repaint (Rectangle r) è di avere solo quella parte di ridipingere e questo è quello che stai chiedendo nella tua domanda; Devo essere frainteso qualcosa qui. Altra domanda, che cosa è 'MasterMindPane.getGraphics()'? Perché non usi il 'Graphics g' fornito? –

risposta

2

Un modo molto semplice è quello di utilizzare paintImmediately(x,y,w,h);

Questa ridisegna solo l'area specificata che inizia a pixel (x, y) con larghezza w e altezza h.

0

È possibile impostare la forma della clip sull'ovale spesso e riempirla.

Crea la forma ovale grande tramite BasicStroke con una linea spessa.

Problemi correlati