Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [Java] creare wizard

  1. #1

    [Java] creare wizard

    Salve a tutti,

    ho iniziato da poco ad usare java per un progetto di tesi,
    dovrei realizzare un iterfaccia stile wizard cioè con una serie
    di finestre (ho utilizzato dei Jframe) che si susseguono e deve
    essere possibile muoversi avanti ed indietro tra queste finestre
    con dei pulsanti(Jbutton) tipo "next" e "previous".
    Vorrei sapere qual'è secondo voi il modo migliore per passare
    da un frame ad un altro (premendo un jbutton).


    ciao ciao

  2. #2
    Secondo me ridisegnando il contenuto del frame ad ogni clic. Potresti mettere i componenti di ogni sessione del wizard ognuna in un JPanel e poi ad ogni clic sui pulsanti inserire il pannello che deve apparire tramite l'istruzione getContentPane().add(pannello);

  3. #3
    Grazie per la risposta velocissima, adesso provo
    e vi faccio sapere.


    Ciao

  4. #4
    Credo che l'unica difficoltà sia nel stare attento a rumuovere ongi volta il pannello precedente. E ricordati di chiamare il metodo validate() dopo aver sostituito il pannello.

  5. #5
    Volendo fare una struttura semplice ,puoi usare un CardLayout.
    Ha un funzionamento molto semplice .Ti crei a priori gli n pannelli che utilizzerai e li inserisci ad uno ad uno nel CardLayout . Ad ogni inserimento il CardLayout crea un oggetto "Card" che ha associato un nome e il pannello appena ricevuto. Quest'oggetto viene a sua volta inserito in un Vector. In questo modo puoi visualizzare i pannelli semplicemente selezionando il successivo , il precedente o richiamandoli tramite un identificativo(che tu stabilisci)
    Oppure volendo una struttura un pò più complessa , puoi creare un automa a stati finiti ed associare ad ogni stato un pannello.

    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  6. #6
    Veramente grazie per l'aiuto, ho fatto così (come suggerito da Salvatore85):

    frame.getContentPane().remove(primo_pannello);
    frame.getContentPane().add(secondo_pannello);
    frame.validate();

    e funziona!!

    per Zero-2:
    Mi potresti spiegare a grandi linee come funziona con un automa
    a stati finiti?

  7. #7
    Un automa a stati finiti è formato appunto da stati e transizioni , ogni stato ha transizioni in entrata e in uscita da e verso altri stati.Ogni automa ha uno stato iniziale e uno o più stati finali.
    Viene rappresentato come un grafo orientato in cui gli stati corrispondono ,in questo caso ,ai pannelli ma più in generale contengono svariate azioni.
    Un automa a stati finiti è molto comodo per far si che un oggetto possa rispondere o comportarsi in modo diverso a seconda dello stato in cui si trova.

    Passando al nostro caso crei una classe GestoreTransazioni che al suo interno contiene una matrice di interi di dimensione n*m dove n è l'indice di stato corrente e m l'indice di transizione, l'elemento matrice[n][m] ti da l'indice del prossimo stato.
    Poi ti crei un array di oggetti Stato di dimensione n(dove n = numero di stati che ha la tua applicazione) che conterrà le istanze degli oggetti Stato

    La classe GestoreTransazioni dopo aver inizializzato avvierà questo ciclo :
    codice:
    //Variabili di classe
    int transizione[][]=new int[n][m];//Rappresenta il grafo
    Stato stato[]=new Stato[n];//Rappresenta l'array degli stati
    ....
    
    public void esegui(){
     int numStatoCorrente=initial;
     Stato statoCorrente=null; 
    while(true){
      statoCorrente=stato[numStatoCorrente];//Ottengo l'oggetto Stato corrente , all'inizio è quello definito dal programmatore
      statoCorrente.action(); //Dico allo stato corrente di eseguirsi
    //Quando avrà finito passerò alla scelta successiva
    //Questo si fa trovando l'indice di stato successivo 
    //all'interno della matrice , determinato dalla posizione
    //corrente e dall'indice che l'utente ha scelto
    //durante l'esecuzione dello stato corrente(Avanti , //indietro....)
    numStatoCorrente=transizione[numStatoCorrente][statoCorrente.scelta()];   
    //Se non è uno stato finale , rappresentato dall'indice -1
    // proseguo ricominciando il ciclo
     if( numStatoCorrente==- 1 ) break;  
    }
    }
    Ora devi crearti una classe astratta(o interfaccia) Stato che realizza(ha) il metodo action() ed ulteriori metodi che servono per la visualizzazione del pannello e che sono comuni a tutti gli stati.
    Tutti i tuoi pannelli dovranno estendere la classe Stato , in questo modo la classe GestoreTransizioni può chiamare il metodo action() senza sapere in che stato ci si trova.

    A grandi linee è così
    Può sembrare complesso , soprattutto per come l'ho spiegato , ma alla fine è molto semplice

    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  8. #8
    La spiegazione va benissimo, sono le mie conoscenze di java
    che non sono all' altezza!

    Comunque rinnovo il grazie per la disponibilità
    e alla prossima

    Ciao Ciao

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.