Ciao a tutti, sono alle prese con un problema che credo sia abbastanza banale, ma che non riesco a risolvere
:
Devo fare un esercizio che vi riassumo:
Dividere un JPanel in 4 parti uguali con delle linee (drawLine)
Fare in modo che quando clicco in uno dei quadrati (quelli creati attraverso le line) questo cambi colore in modo casuale.
Il pannello con una cella che è stata cliccata:
fin qui tutto ok, ma ho un problema: vorrei che quando clicco per esempio sul quadrato in alto a destra e poi su quello in basso a sinistra quello cliccato precedentemente resti comunque colorato.
Questo è quello che ho scritto fino adesso:
Codice PHP:
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
/**
*
* @author Davide
*/
public class MyPanel extends JPanel implements MouseListener {
private JPanel pannello=new JPanel();
int fx,fy,x=0,y=0;
Random random = new Random(System.currentTimeMillis());
Color colore;
int cont=0;
public MyPanel(){
this.setBackground(Color.WHITE);
this.addMouseListener(this);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
colore = new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
fy=this.getSize().height;
fx=this.getSize().width;
//colorazione in base al click
g.setColor(colore);
if(x<=fx/2 && y<=fy/2 && x>0)//alto sx (x>0 perchè altrimienti parte direttamente colorato perchè x=0)
g.fillRect(0, 0, fx/2, fy/2);
if(x<=fx/2 && y>=fy/2)//basso sx
g.fillRect(0, fy/2, fx/2, fy/2);
if(x>=fx/2 && y<=fy/2) //alto dx
g.fillRect(fx/2, 0, fx, fy/2);
if(x>=fx/2 && y>=fy/2) //basso dx
g.fillRect(fx/2, fy/2, fx, fy);
g.setColor(Color.black);
g.drawLine(fx/2, 0, fx/2, fy);
g.drawLine(0,fy/2, fx, fy/2);
}
@Override
public void mouseClicked(MouseEvent me) {
x=me.getX();
y=me.getY();
repaint();
}
@Override
public void mousePressed(MouseEvent me) {}
@Override
public void mouseReleased(MouseEvent me) {}
@Override
public void mouseEntered(MouseEvent me) {}
@Override
public void mouseExited(MouseEvent me) { }
}
credo il problema sta nel fatto che quando chiamo la repaint() a seguito di un click questa ri-esegue (ovviamente) anche super.paintComponent(g); che ovviamente non posso togliere...
PS: se volete provare a compilare voi stessi vi allego il progetto dove c'è anche il main (ci sono altre cose che devo ancora implementare, ma non danno fastidio
)
progetto:
https://www.dropbox.com/s/bfp0e25liy...e_2-gen-09.zip