Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [java]gestione dei pulsanti e codice sporco

    Buon pomeriggio!

    Avrei un pò di dubbi da risolvere:

    1)
    Per gestire un pulsante,viene riscritto il metodo actionPerformed(),nel quale poi,mediante la lettura di una stringa,mi fa capire quale pulsante è stato premuto.

    Ma se ho un numero molto grande di pulsanti,e mi risulta scomodo inserire una serie di if,e vorrei inserire uno switch,come si fa a paragonarlo con una stringa?

    switch(Stringa)
    {
    case ...
    ...
    }
    è scorretto,si dovrebbe usare il metodo equals,ma come?

    2)
    Una volta riconosciuto il pulsante,di seguito si scrivono le istruzioni per fargli eseguire le dovute operazioni.
    Ma se queste operazioni volessi inserirle in un unico metodo che poi verrebbe richiamato dal gestore dei pulsanti?
    Ho pensato a questa risoluzuione:
    metodo()
    {
    xxx
    xxx
    xxx
    }
    public void ActionPerformed(...)
    {
    String leggi=e.get...
    if(leggi.equals("xxx"))
    {
    metodo();
    }
    }
    ...

    Ma java mi da errore

    3)
    Ho scritto una semplice applet per effettuare il login,solo che il codice non mi sembra molto pulito:
    Ho in totale 6 user con relative password,quindi ho messo un controllo di questo tipo:
    if((user.equals("user1)&&(pass.equals("pass1"))||. ..||...||(user.equals("user6)&&(pass.equals("pass6 ")))
    {
    ...
    }
    Come potrei rendere migliore questo conrtollo?

    Pago 100 euro per ogni risposta

  2. #2
    1) Lo switch non funziona con le stringhe , ma solo char e interi.
    Puoi inserirli in un array o in un vector in modo tale da controllari in un ciclo for.

    2)Che errore ti da??
    Se il metodo lo richiami da una inner class lo puoi fare
    Es.
    codice:
    public class prova{
    ....
    ...
    private void scrivi(){....}
    
    class listener extends ActionListener{
    public void actionPerformed(ActionEvent e){
    scrivi();
    }
    }
    }
    3)Finchè le user sono poco puoi inserirle in un hashset e controllare se la coppia user-pass è presente nell'archivio.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  3. #3
    Originariamente inviato da Zero-2
    1) Lo switch non funziona con le stringhe , ma solo char e interi.
    Puoi inserirli in un array o in un vector in modo tale da controllari in un ciclo for.

    2)Che errore ti da??
    Se il metodo lo richiami da una inner class lo puoi fare
    Es.
    codice:
    public class prova{
    ....
    ...
    private void scrivi(){....}
    
    class listener extends ActionListener{
    public void actionPerformed(ActionEvent e){
    scrivi();
    }
    }
    }
    3)Finchè le user sono poco puoi inserirle in un hashset e controllare se la coppia user-pass è presente nell'archivio.

    la terza non mi è chiara


    cmq grazie

  4. #4
    Quando un utente si registra inserisci nell'hashset una stringa "user-pass" , cosicchè quando si logga , tu controlli che la stringa "user-pass" che leggi dai JTextField sia contenuta all'interno dell'hashset tramite il metodo contains(Object v);
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Java permette anche di avere delle CLASSI ANONIME. Questo significa che puoi associare ad ogni pulsante un ActionListener dedicato anche senza conoscere a priori il numero di questi ActionListener.

    Se devi, per esempio gestire k pulsanti puoi fare una cosa del genere: inserire questi k pulsanti in un array di k elementi e associare a ciascuno di questi un ActionListener:
    codice:
    for (int i=0; i<k; i++) {
       pulsante[k].addActionListener( new ActionListener() {
          public void actionPerformed(ActionEvent ae) {
             gestisciPulsante(ae);
          }
       });
    }
    A questo punto, puoi estendere la classe Button (o JButton) e fare in modo che abbia un indice interno leggibile tramite un metodo. Così puoi usare il tanto amato switch:
    codice:
    public class MioBottone extends Button {
       private int indice;
       public MioBottone(int indice) { this.indice = indice; }
       public int getIndice() { return indice; }
       ...
    }
    
    public gestisciPulsante(ActionEvent ae) {
       MioBottone mb = ((MioBottone) ae.getSource());
       switch (mb.getIndice()) {
          case 0:  // primo pulsante (ma gli indici puoi sempre farli partire da 1)
             break;
          ...
       }
    }
    In questo modo dovrei aver risolto anche al tuo secondo problema (che era legatissimo al primo...).

    Per il punto 3, a parte usare l'hashing come ti hanno già suggerito, non vedo altre soluzioni semplici.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    grazie 1000 e auguri


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.