Aggiungere interfaccia grafica

di il
4 risposte

Aggiungere interfaccia grafica

Salve ragazzi, ho realizzato un semplice progettino che gestisce un garage. Qui allego la main class, volendo posso aggiungere anche le varie classi
Fondamentalmente è un menu che permette di fare varie operazioni su un array di oggetti (inserimento ecc..)
Tutto questo funziona a linea di comando e vorrei aggiungere l'interfaccia grafica.
Conosco swing e la gestione degli eventi in quanto ho realizzato semplici applicazioni grafiche con jbutton,jlabel,jtextfield e simili....
Tuttavia per questo progetto ho pensato di scindere la parte di programmazione e di aggiungere in seguito la parte di GUI. Non so se ho fatto bene, ma ora non riesco a capire come fare ad aggiungere l'interfaccia grafica. Mi manca il capire come fare a collegare le due cose. Spero di essermi spiegato..qualcuno mi da una diritta?
grazie
  public static void main(String[] args) {
        Automobile a[]=new Automobile[2];
        a[0]=new Automobile(4,2000,2500,"benzina","audi");
        a[1]=new Automobile(2,2010,2500,"benzina","bmw");

        Furgone f[]=new Furgone[3];
        f[0]=new Furgone(4000,2000,2500,"benzina","man");
        f[1]=new Furgone(2000,2002,4500,"diesel","peugeot");
        f[2]=new Furgone(6000,2004,6500,"diesel","citroen");
        
        Motocicletta m[]=new Motocicletta[2];
        m[0]=new Motocicletta(4,"stradale",2018,1200,"benzina","ducati");
        m[1]=new Motocicletta(4,"cross",2011,600,"benzina","ktm");

        Scanner s=new Scanner(System.in);
        
        System.out.println("inserisci dimensione array");
        int dim=s.nextInt();
        Garage g=new Garage(dim);
        
        int scelta=0;
        do{
             System.out.println("Menu\n 1.inserimento auto\n 2.inserimento furgone\n 3.inserimento moto\n 4.estrazione\n 5.stampa\n 6.esci\n");
             scelta=s.nextInt();
             switch(scelta){
                 case 1:
                     for(int i=0;i<5;i++){
                         g.caricaVeicolo(a[i]);
                     }
                     break;
                 case 2:
                     for(int i=0;i<3;i++){
                         g.caricaVeicolo(f[i]);
                     }
                     break;
                 case 3:
                     for(int i=0;i<2;i++){
                         g.caricaVeicolo(m[i]);
                     }
                     break;
                 case 4:
                     System.out.println("inserire posto da cui togliere veicolo");
                     int z=s.nextInt();
                     g.estraiVeicolo(z);
                     break;
                 case 5:
                     g.stampaSituazione();
                     break;
             }
        }
        while(scelta!=6);

    }
    
}

4 Risposte

  • Re: Aggiungere interfaccia grafica

    Che io sappia (ma ne sono abbastanza certo) non esiste un modo semplice per aggiungere un interfaccia grafica al tuo programma.

    Ti serve tanta pazienza

    Se non hai in mente un layout particolare potresti partire costruendo un semplice menu con 6 pulsanti, uno per ogni opzione che hai implementato.
    Poi scegli come continuare per ogni opzione: potresti aprire per ogni pulsante cliccato una diversa , in cui permetti di inserire i parametri con componenti appositi e di confermare/cancellare la scelta, o in cui mostri solamente i dati quando necessario.

    Potresti anche usare un CardLayout, in quel caso avresti un solo container in cui scambi i vari pannelli, o un JTabbedPane, in cui ogni opzione viene gestita in una diversa tab.
    Nulla ti impedisce di avere anche un frame singolo, ma serve un po' di pratica per innestare tutti i pannelli assieme

    Se il problema è il come collegare le classi, dipende tutto dalla soluzione che vuoi adottare.

    Nel primo caso la classe con il main potrebbe solo richiamare il costruttore della classe dove crei il menù (che potrebbe estendere JPanel e essere settata poi nel main come content pane di un frame, o anche estendere direttamente JFrame).
    Nel costruttore crei il tuo menù e istanzi un unico oggetto della classe Garage. Questo è il tuo "modello" logico, e non hai bisogno di creare altri oggetti di questo tipo.

    Se usi le JDialog modali non ti serve nemmeno passare il reference del garage creato ad altre classi che modellino le opzioni.
    Prendi la prima opzione come esempio: l'aggiunta di un Automobile. Se hai una classe che estende JDialog dove imposti i vari parametri e puoi cliccare un pulsante di conferma, ti basta creare un'istanza di questa classe nella classe dove sei, e creare un metodo nella dialog che la rende visibile (se la dialog è modale il flusso del programma si blocca fino a quando non viene chiusa) e che ritorna un oggetto di tipo Automobile alla chiusura. Quando premi il tasto di conferma leggi tutti i dati dai campi, crei l'oggetto Automobile, e chiami il dispose sulla dialog per ritornare l'oggetto creato. Puoi anche ritornare null in caso l'utente abbia cancellato la scelta.
    A quel punto, se l'automobile è diversa da null, la puoi aggiungere al garage dalla classe del menù.

    Per le altre opzioni vale un discorso simile, in alcuni casi il costruttore della dialog o di un'altra classe potrebbe avere bisogno di alcuni dati per costruire una sotto finestra, ma non cambia molto.

    Spero di non aver scritto una risposta troppo vaga, dalla tua domanda non avevo esattamente idea di cosa ti aspettassi, e se vuoi si può sicuramente approfondire
  • Re: Aggiungere interfaccia grafica

    Grazie Ansarhja. Credevo esistesse un modo semplice ma quindi la risposta è no. Farò delle prove.
    Quindi in sostanza devo creare una classe che estende JFrame ?
    E dentro piazzare ad esempio dei JButton o dei JTabbedPane?
  • Re: Aggiungere interfaccia grafica

    Se usi netbeans potresti usare sheen, un tool della oracle stessa da implementare in netbeans, sempre che tu lo voglia fare graficamente il tuo frame e non da codice (se è questo che volevi sapere)
  • Re: Aggiungere interfaccia grafica

    reynold ha scritto:


    Grazie Ansarhja. Credevo esistesse un modo semplice ma quindi la risposta è no. Farò delle prove.
    Quindi in sostanza devo creare una classe che estende JFrame ?
    E dentro piazzare ad esempio dei JButton o dei JTabbedPane?
    Puoi certamente usare una classe che estende JFrame. Ma quello è solo il punto di partenza. Più che usare JTabbedPane io ti consiglierei di iniziare nel primo modo che avevo suggerito, ovvero avere un unico pannello con il menu (dove potresti avere un bottone per ognuna delle opzioni del menù che stampavi a video) e di aprire una JDialog per ogni opzione.

    Questo ti evita di dover sincronizzare le varie tab quando fai una modifica, ma ovviamente puoi farlo comunque, era solo per suggerirti di partire nel modo più semplice.
    Ovviamente poi avrai molti JButton.

    Le cose da sapere per fare anche una semplice GUI sono molte: ti suggerirei di partire con il tutorial ufficiale sui componenti swing, e con quello sui LayoutManager per imparare a disporli in una GUI (fanno tutti parte della sezione dei tutorial su swing, ci sono molte altre cose interessanti ).
Devi accedere o registrarti per scrivere nel forum
4 risposte