|
| Opretning af event Fra : Allan Schmidt |
Dato : 12-09-02 09:41 |
|
Jeg har i et større program lavet et panel (JPanel) der indeholder et
numerisk tastatur, da det skal køre på en touchscreen. Da tastaturet skal
bruges flere steder og man nogle steder ikke vil vente på det vil jeg gerne
kunne sætte en ActionListener på det og så fra panelet aktivere en Action
når man trykker på enter.
Håber det giver mening.
Kan det gøres... og hvordan?
Er det måden at gøre det på?
Allan
| |
Peter Lind (12-09-2002)
| Kommentar Fra : Peter Lind |
Dato : 12-09-02 14:38 |
|
"Allan Schmidt" <as8009@ehs.dk> wrote:
> Jeg har i et større program lavet et panel (JPanel) der indeholder et
> numerisk tastatur, da det skal køre på en touchscreen. Da tastaturet skal
> bruges flere steder og man nogle steder ikke vil vente på det vil jeg
gerne
> kunne sætte en ActionListener på det og så fra panelet aktivere en Action
> når man trykker på enter.
> Håber det giver mening.
Måske...
> Kan det gøres... og hvordan?
Ja, næsten alt kan lade sig gøre...
> Er det måden at gøre det på?
Det kommer lidt an på hvad du egentlig vil.
Jeg går ud fra at du har lavet dit 'tastatur' så det extender JPanel, f.eks
class NumericalKeypad extends JPanel.
Hvis du nu også vil kunne lytte til actions på det, skal du blot tilføje en
addActionListener metode.
f.eks:
private java.util.List listeners;
// husk listeners = new java.util.ArrayList() i din konstruktør
public void addActionListener( ActionListener listener )
{
listeners.add( listener );
}
Når der så skal sendes en action til dine action-listeners, itererer du
igennem listen af listeners, og kalder actionPerformed på hver, f.eks:
ActionEvent e = new ActionEvent( this, ActionEvent.ACTION_PERFORMED,
"enter");
for( int l=0; l < listeners.size(); l++ )
{
((ActionListener)listeners.get(l)).actionPerformed( e );
}
Du skal selvfølgelig have din egen actionListener i NumericalKeypad der
lytter på om der bliver trykket på enter, og aktiverer denne lille sekvens.
Det skulle kunne gøre det du eftersøger - men måske det ville være smartere
at lade dit keypad sende almindelige KeyEvents ud - men det er selvfølgelig
lidt mere kompliceret.
mvh
Peter Lind
| |
Allan Schmidt (17-09-2002)
| Kommentar Fra : Allan Schmidt |
Dato : 17-09-02 09:24 |
|
> Jeg går ud fra at du har lavet dit 'tastatur' så det extender JPanel,
f.eks
> class NumericalKeypad extends JPanel.
> Hvis du nu også vil kunne lytte til actions på det, skal du blot tilføje
en
> addActionListener metode.
> f.eks:
>
> private java.util.List listeners;
> // husk listeners = new java.util.ArrayList() i din konstruktør
> public void addActionListener( ActionListener listener )
> {
> listeners.add( listener );
> }
>
> Når der så skal sendes en action til dine action-listeners, itererer du
> igennem listen af listeners, og kalder actionPerformed på hver, f.eks:
>
> ActionEvent e = new ActionEvent( this, ActionEvent.ACTION_PERFORMED,
> "enter");
>
> for( int l=0; l < listeners.size(); l++ )
> {
> ((ActionListener)listeners.get(l)).actionPerformed( e );
> }
Takker for svaret. Det var meget nyttigt, men jeg arbejdede videre og kom
frem til at bruge:
int i = Integer.parseInt(out.getText());
firePropertyChange("Enter",0,i);
og så sætte en PropertyChangeListener på Panelet som reagerer på "Enter" så
kan den bruge getNewValue(); til at få værdien istedet for at den selv skal
køre en funktion på NumTast for at hente den.
Allan
| |
|
|