Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [JAVA] Menu dianmico....

    ciao a tutti,

    devo creare una specie di menu dianmico che legge gli elementi da un file di testo.
    Creo il menu e fin qui tutto bene, faccio un ciclo for circa così :

    codice:
    int N = .... /* Numero di elementi */
    JMenu Menu = new JMenu("XXX");
    for(int i = 0 ; i < N ; i++){
      Menu.add(new JMenuItem(testo letto del file));
    }
    ora dovrei aggiungere degli ActionListener per segure dei comandi diversi a seconda dell item selezionato. Come faccio ??


  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Allora, suppongo che il testo che leggi dal file e che identifica un menu sia suffficiente anche per sapere il tipo di azione da svolgere; un modo di procedere puo essere allora quello di costruire un'istanza di AbstractAction che rappresenta l'azione da eseguire quando si esegue il menu; l'item del menu quindi puo essere costruito passandogli direttamente l'AstracAction che è una classe che implementa ActionListener; esempio:

    codice:
    int N = .... /* Numero di elementi */
    JMenu Menu = new JMenu("XXX");
    for(int i = 0 ; i < N ; i++){
      String = testo letto del file;
      Action action = null;
      if(testo letto del file == "New"){
        //Costruisco una Action per il menu item
        action = new AbstractAction("New", new ImageIcon("New16.gif")) {
          public void actionPerformed(ActionEvent e){
    	 //Codice da eseguire quando viene selezionato il menu;
          }
        };
      
      }
      //il menu item viene costruito sulla action, che sara registrata
      //come listener del menu item
      Menu.add(new JMenuItem(action));
    }
    Il costruttore di AbstractAction prende la stringa da visualizzare nel menu item, e un'icona (credo sia opzionale) da visualizzare accanto alla voce di menu. Quello che si fa in quel codice è costruire un'istanza di una classe anonima che estende AbstractAction, e ne implementa il metodo actionPerformed, che è astratto in AstracAction.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Grazie mille !!

  4. #4
    ...non mi torna ancora una cosa...

    cosa metto sotto
    codice:
    //Codice da eseguire quando viene selezionato il menu;
    voglio dire, nel file di testo c'è il testo da visualizzare e un nome di un file da caricare, devo associare il nome file del menu selezionato ad una variabile String.
    ho fatto una cosa del genere :
    codice:
    String F
    
     public void actionPerformed(ActionEvent e){
        //Codice da eseguire quando viene selezionato il menu;
        F = Classemia.getFilesNames(i);
     }
    ma non funziona..

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    o dichiari F nel metodo actionperformed oppure deve essere un campo della classe all'interno della quale istanzi i menu, altrimenti non e visibile all'interno della classe interna.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6
    si, scusa in effetti l'ho dichiarata come campo della classe principale... ma non funziona :
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    quindi ho provato a usare come indice i-1, e anche in questo caso non funziona, infatti mi restituisce dempre l'ultimo elemento del menù anche se io seleziono il primo.

    HELP !!!

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    l'errore non dipende dal codice che ho scitto io, ma da un accesso sbagliato che fai te nel codice; è un errore di runtime; controlla gli indici di eventuali vettori ed array, se no posta il codice

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  8. #8
    forse ho trovato l'errore... dipende dal fatto che quando chiamo il metodo ActionPerformed con il codice

    codice:
    public void actionPerformed(ActionEvent e){
        //Codice da eseguire quando viene selezionato il menu;
        F = Classemia.getFilesNames(i);
     }
    l'indice i è sempre al valore dell'ultimo elemento (ad esempio con 2 elementi l'indice i è a 2) perchè lo chiamo dopo aver finito il ciclo for.

    dovrei trovare il modo di avere un indice corrispondente alla voce di menu selezionata da passare alla al metodo getFilesNames della classe classemia.

    Mi servirebbe qualcosa come il metodo getSelectedItemIndex delle Choice...ma non credo esista.

    in sostanza devo passare a
    codice:
    F = Classemia.getFilesNames(i)
    un indice del menu selezionato.

  9. #9
    forse ho trovato un trucchetto non molto ortodosso ma....funziona.

    il nome del file per me diventa il codice hash della classe ActionPerformed così posso fare come segue :

    codice:
       File = ""+this.hashCode();
    non è il massimo ma come dicevo funziona...resto comunque in attesa di idee migliori.

  10. #10
    emm...no, in sealtà non funziona, anche perchè il codica hash cambia sempre....

    Aiuto !!!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.