Newsgroup: it.comp.java
Titolo: Button vs. Vector

/*
	salve a tutti,
	il mio problema e' il seguente..
	mi creo dinamicamente una serie di Button,
	che appoggio in un Vector.
	poi questi Button (presi dal Vector) li' sparo in un pannello
	e fin qui tutto ok, il rilultato e' buono..ma poi..
	vorrei far ascoltare questi Button dal gestore di eventi
	tramite l'actionListener ..il problema e' che non riesco a 
	risalire
	all'oggetto Button creato in modo dinamico...dato che esso risiede 
	nel Vector..
 
	Lo so'...pensate.. "ma questo che sta a di'??.." :-)
 
	beh spero che con il mio listato capirete meglio il mio problema..
	a voi...
 
 
	chi la vincera'? il Button o il Vector?? ...
	se e' una cosa assurda ditemelo senza problemi :)) 
*/
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
class AlberoButton extends Frame implements WindowListener, 
ActionListener{
 
	Button buttonstart = null;
	Button buttonend = null;
	Vector vettore = new Vector();
	AlberoButton(){
 
		setTitle("Albero");
		//qui genero i bottoni e li' appoggio in un vettore.
		setLayout(new FlowLayout());
		for (int i = 0;i < 5; i++){
				vettore.add(new Button("numero" + i));
		}
 
 
 
    Panel centerPanel = new Panel();
    centerPanel.setLayout(new GridLayout(5,1));
		centerPanel.add((Button)vettore.elementAt(0));
		centerPanel.add((Button)vettore.elementAt(1));
		centerPanel.add((Button)vettore.elementAt(2));
		centerPanel.add((Button)vettore.elementAt(3));
		centerPanel.add((Button)vettore.elementAt(4));
	  /* ora ho aggiunto i bottoni al pannello ecc. ecc...
		   ma come posso riferirmi ora a questi oggetti..
		   per dare il consenso per l'actionListener???
		   oppure se voglio cambiare colori ecc ecc?
		   Ovviamente i vari Button sono nel vettore,
		   se cambio loro le proprieta'..restano li'
		   e non influenzano ovviamente l'interfaccia...
		*/
 
    add("Center",centerPanel);
		setSize(300,300);
		setVisible(true);
 
	}
 
	//Qui vorrei catturare il click di un Button ma non ci riesco.
	public void actionPerformed(ActionEvent e){
		if(e.getActionCommand().equals("numero0")){
			System.out.println("numerojfkj");
		}
	}
	public void windowActivated(WindowEvent e){
	}
	public void windowClosed(WindowEvent e){
	}
  public void windowClosing(WindowEvent e){
		System.exit(0);
	}
  public void windowDeactivated(WindowEvent e){
	}
  public void windowDeiconified(WindowEvent e){
	}
  public void windowIconified(WindowEvent e){
	}
  public void windowOpened(WindowEvent e){
	}
}
// Grazie!... CIAO

	
Ma se dall'evento prendi il source
public Object getSource()
e poi fai il cast di Object in Button, non dovresti avere quello che
cerchi?
Un riferimento all'oggetto Button che ha creato l'evento.
public void actionPerformed (ActionEvent e)
{
Button b = (Button)e.getSource();
}
(non sono sicurissimo del codice)
Ciao

 nel Vector..
Puoi semplicemente fare :
...
public AlberoButton() {
     for (int i = 0;i < 5; i++)
         vettore.add(new Button("numero" + i));
    ........
    for (int i = 0;i < 5; i++)
        ((Button)vettore.elementAt
(i)).addActionListener(this);
    ......
}
Spiegazione:
((Button)vettore.elementAt(0)).addActionListener
() ti permette di aggiungere
il tuo listener. Nota la posizione delle
parentesi, sono necessarie per fare
un cast corretto. Se fai solo
(Button)vettore.elementAt(0).addActionListener()
il compilatore crede che
vuoi utilizzare un metodo di Object di nome
addActionListener, che
chiaramente non esiste. Con le parentesi fai
prima un cast sul risultato di
elementAt() e poi chiami il metodo.
bye
Carlo
Sent via Deja.com 
http://www.deja.com/
Before you buy.