PDA

Visualizza la versione completa : [JAVA]Eventi


I'mtheleader
17-02-2004, 18:50
Ciao a tutti-.--

Di java sono nuovo... :gren:

Allora voglio usare dei gestori di evento...

Voglio che quando clicco il mio form mi venga aggiunto un bottone

Io inizialmente ho già creato il bottone...

-------------------------

Button bu = new Button();

-------------------------

e non gli ho detto di rendersi visible...


quindi nel form ho messo....

----------------------------

this.addonclick(bu);

----------------------------

sperando che mi aggiungesse questo controllo invece mi da errore....

Come potrei fare? grazie a tutti ciao ciao!! :ciauz: :ciauz:

LeleFT
17-02-2004, 19:02
Devi aggiungere al tuo Form un MouseListener.


public class MioForm extends Frame {
public MioForm() { // costruttore
addMouseListener( new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
aggiungiPulsante();
}
});
}

private void aggiungiPulsante() {
add(bu);
doLayout() // per far sì che il form si ridisegni.
}
}

Questo dovrebbe essere sufficiente allo scopo, ma non sarà sicuramente chiaro per capire cosa è stato fatto e perchè.

Cominciamo col dire che quando si ha a che fare con gli eventi, bisogna aggiungere al controllo incaricato di riceverlo, un Listener appropriato. I Listener sono delle interfacce che mettono a disposizione i metodi adatti a ricevere gli eventi. Siccome le interfacce mettono a disposizione molti metodi (ad esempio, MouseListener mette a disposizione 6 metodi) essi devono essere implementati TUTTI. Per ovviare a questo sono state preconfezionate delle classi che implementano già tutti i metodi vuoti, permettendo, quindi, di poterli sottoporre ad override. Queste classi sono gli Adapter. (So che il discorso sembra alquanto oscuro, ma ci vorrebbe una trattazione solo su questo genere di classi).

Un metodo alternativo consiste nel far implementare all'oggetto stesso, l'interfaccia che serve allo scopo. In questo caso avrei potuto far implementare al Frame l'interfaccia MouseListener. Questo è un modo che ha Java per ovviare all'assenza di ereditarietà multipla e produce come effetto il fatto che il Frame sarebbe diventato un oggetto di tipo MouseListener. Detto questo, è chiaro che avrei, di conseguenza, potuto aggiungere come Listener il frame stesso ( addMouseListener(this) ). Avrei, però, dovuto implementare tutti i metodi, anche quelli che non mi interessano (implementandoli vuoti).

Spero che l'uso che ho fatto della classe anonima non sia di troppo disturbo o troppo oscura... se così fosse puoi sempre chiedere informazioni, sarò lieto di spiegarti ulteriormente la cosa. Per ora credo che sia sufficiente quanto detto.


Ciao. :ciauz:

I'mtheleader
17-02-2004, 20:48
Grazie ho capito!!

In pratica usando questi Listener sarebbe come dire...
"stai in ascolto di eventi"

In questo modo il programma diventa abilitato a percepire gli eventi che possono così essere utilizzati.

Però ho un piccolo problema.

Il compilatore mi dice che addMouseListener non è definito.

Probabilmente non ho importato qualche libreria.

Mi diche quale libreria devo importare?

Grazie ciao ciao!!! :ciauz: :ciauz:

anx721
17-02-2004, 21:04
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

I'mtheleader
17-02-2004, 21:49
asso...
ho già importato la com.ms.wfc.ui e se importo la java.awt
mi da nome ambiguo perche presente in entrambe le librerie

...

anx721
17-02-2004, 22:21
Originariamente inviato da I'mtheleader
asso...
ho già importato la com.ms.wfc.ui e se importo la java.awt
mi da nome ambiguo perche presente in entrambe le librerie

...

Dipende da ciò che usi, ma maagari java.wat non ti serve, vedi se compila senza problemi. Se ti dovessi servire per alcune classi, invece di importare java.awt, puoi far riferimento alle classi definite in quel package usando il nome del package stesso, esempio:

java.awt.NomeClasse a = new java.awt.NomeClasse();

I'mtheleader
17-02-2004, 22:23
è sorto un altro problema.

Io la javax non ce l'ho.

Se avvio la compilazione mi da sempre l'errore del nome "addMouseListener" non dichiarato...

come posso fare?

LeleFT
17-02-2004, 22:45
Ma che classe usi? Io mi riferivo a Frame di AWT. il metodo addMouseListener è definito per tutti i Component.

Per poter, invece, utilizzare la classe MouseEvent (necessaria nel Listener) devi importare java.awt.event.*


Ciao. :ciauz:

I'mtheleader
18-02-2004, 19:10
Io nel mio progetto ho un Form.

cmq io ho inseriro la java.awt.*; e comunque mi dice che sto benedetto addMouseListener è un nome non definito!!

Vi prego una mano!!

ciao a tutti!!

LeleFT
18-02-2004, 19:20
Non capisco... cosa intendi per Form? Hai una classe che estende Frame? Oppure una classe che estende JFrame? Immagino nessuna delle due, perchè entrambe ereditano da Component, quindi entrambe hanno il metodo addMouseListener. Dovresti postare un po' del tuo codice. :bhò:

Non è che si tratta di JSP? Siccome non conosco JSP, potrebbe darsi che si tratti di qualche classe che non ha nulla a che vedere con le AWT e/o le Swing...

Se il problema fosse un'altro, controlla che il metodo addWindowListener lo devi applicare ad un Component (quindi Frame o JFrame o qualcos'altro): se tu hai un progetto composto da un main che crea ed avvia un Frame in questo modo...


public static void main(String [] args) {
Frame f = new Frame();
...
f.show();
}

...allora devi usare questa sintassi:


f.addMouseListener(...);


Ciao. :ciauz:

Loading