PDA

View Full Version : [JAVA] far apparire/scomparire immagini con i pulsanti


ruggeroerre
07-01-2013, 14:19
salve a tutti
mi sto cimentando con la grafica in java, però non ho capito come far apparire un immagine solo se viene premuto un JButton. questo è il codice che ho scritto, però non ho capito come devono interagire i metodi paintcomponent e actionperformed...


public class PanelCol2 extends JPanel implements ActionListener{

JButton b3;
Image img1;

public PanelCol2() throws MalformedURLException{

super();

b3 = new JButton("cane");

b3.addActionListener(this);

add(b3);

Toolkit tk = Toolkit.getDefaultToolkit(); //estraiamo il toolkit del pannello
URL url = new URL("http://digital-photography-school.com/wp-content/uploads/2007/07/pet-photograph.jpg");
img1 = tk.getImage(url); //assegnamo il valore all'immagine a partire dal toolkit
MediaTracker mt = new MediaTracker(this);//mt si occupa del caricamento delle immagini. il componente su cui avverrà il disegno è il pannello stesso(this)
mt.addImage(img1, 1);//aggiungiamo l'immagine specificando un num identificativo

try { mt.waitForAll(); //si dice a mt di aspettare il caricamento delle immagini
}
catch (InterruptedException e) {}
}

public void actionPerformed(ActionEvent e){

Object pulsantepremuto = e.getSource();


if(pulsantepremuto==b3{ //e ora??????


}


public void paintComponent(Graphics g){

super.paintComponent(g);

g.drawImage(img1, 200, 200, null);
}


vi ringrazio in anticipo ;)

Cait Sith
07-01-2013, 22:08
premetto che è un po' che non uso java e non ricordo il nome corretto delle funzioni del paint, comunque si dovrebbe fare così:

con il bottone tu imposti un boolean (privata della classe principale) che ti dice se devi fare vedere l'immagine o no: se vuoi che cliccando una volta compaia e successivi click siano superflui, nell' actionPerformed fai
variable=true;
se invece vuoi che cliccando compaia e ricliccando scompaia fai:
variable=!variable
a questo punto la funzione paintComponent (il cui nome prendo per buono perchè non ricordo) deve fare:

public void paintComponent(Graphics g){
super.paintComponent(g);
if(variable==true) g.drawImage(img1, 200, 200, null);
}

poi per finire nel actionPerformed, aggiungi un
repaint();
finale che forza l'aggiornamento del componente grafico

in questo modo dovrebbe funzionare, in ogni caso più o meno rende l'idea di come si deve fare