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:
Il pannello con una cella che è stata cliccata: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.
![]()
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:
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...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) { }
}
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

:
)
Rispondi quotando
