Realizzare GUI personalizzate

di il
9 risposte

Realizzare GUI personalizzate

Buonasera, apro questa discussione per chiedervi se ed in che modo fosse possibile creare delle GUI personalizzate. Mi spiego meglio, il mio intento sarebbe quello di progettare la GUI graficamente, attraverso opportuni programmi, per poi realizzarla fisicamente in seguito.

Vi riporto anche un esempio: http://puu.sh/oaLJx/b304cf0751.pn

Inoltre, vorrei far in modo che la stessa GUI vada bene sia su Windows che su altri OS.

9 Risposte

  • Re: Realizzare GUI personalizzate

    Kohei ha scritto:


    Buonasera, apro questa discussione per chiedervi se ed in che modo fosse possibile creare delle GUI personalizzate. Mi spiego meglio, il mio intento sarebbe quello di progettare la GUI graficamente, attraverso opportuni programmi, per poi realizzarla fisicamente in seguito.

    Vi riporto anche un esempio: http://puu.sh/oaLJx/b304cf0751.pn

    Inoltre, vorrei far in modo che la stessa GUI vada bene sia su Windows che su altri OS.
    La questione è un po' ampia. Innanzitutto visto che parli di applicazioni "desktop", dovresti anche precisare quale framework GUI intenderesti usare. Ce ne sono almeno 4 di noti: AWT, Swing, SWT e JavaFX. Dimentichiamo AWT che è parecchio "old" e ben poco flessibile.
    Sono tutti parecchio diversi e ciascuno ha le sue potenzialità e peculiarità.

    Fare interfacce come quella nella immagine, non è impossibile né difficile. Alla fine si tratta di conoscere bene il framework utilizzato e sfruttare ciò che offre per gestire immagini, bordi, icone, fare del custom-painting, ecc...

    Pensare poi di "disegnare" la GUI magari con un programma di grafica, ha poco senso per le applicazioni desktop, perché sono fatte di componenti discreti, dove ciascuno ha un certo aspetto che può anche essere personalizzato. DIfficilmente (se non impossibile) riuscirai a fare cose del genere, cioè "disegnare" un componente con un programma di grafica (es. Gimp, Photoshop ecc..) e poi banalmente "applicare" quell'aspetto esattamente e precisamente in qualunque situazione.

    Non ho molto tempo ora, purtroppo, ma se vuoi continuare nel discorso, precisa cosa sai e cosa vuoi utilizzare.
  • Re: Realizzare GUI personalizzate

    Allora io uso NetBeans ed uso il tool che mi consente di generare GUI in maniera molto semplice. Utilizzo componenti Swing e ho provato a smanettare un po' con le varie proprietà. Ciò che ho notato è che alcune opzioni dipendono dal particolare Look & Feel e non posso modificarle a mio piacimento (es. background-color del jComboBox). Per la questione grafica, diciamo che era solo per farmi una preview mia e poi montarla direttamente grazie alle opzioni disponibili.
    Sarei anche disposto ad imparare nuove cose, alla fine tutto è utile.

    Es. fare jComboBox personalizzabili come quelli su Skype: http://puu.sh/oaVuu/dfb8ac19b8.pn oppure aggiungere transizioni, hover, un po' come per il CSS.
  • Re: Realizzare GUI personalizzate

    Kohei ha scritto:


    Allora io uso NetBeans ed uso il tool che mi consente di generare GUI in maniera molto semplice.
    Non so se NetBeans sia migliorato in ambito di editor di GUI ma per quanto ho visto in passato, generava codice estremamente prolisso, fumoso, illeggibile e ingestibile a mano. Gli editor di GUI poi spesso usano i layout manager GroupLayout o SpringLayout che sono i due l.m. di Swing tra i più contorti e complessi.
    Se poi ci fosse bisogno di realizzare qualche architettura particolare a livello di design delle classi per la GUI, un editor di GUI potrebbe anche metterti i classici "bastoni tra le ruote".
    Insomma, per me un editor di GUI ha senso solo se: a) hai fretta, b) sai poco/niente del framework di GUI scelto, c) non ti interessa granché la qualità del codice generato. Senza offesa per gli editor di GUI o per qualcuno.

    Kohei ha scritto:


    Utilizzo componenti Swing e ho provato a smanettare un po' con le varie proprietà. Ciò che ho notato è che alcune opzioni dipendono dal particolare Look & Feel e non posso modificarle a mio piacimento (es. background-color del jComboBox).
    Nel L&F "Metal" (quello predefinito di Swing) il background di JComboBox è impostabile. Potrebbe non esserlo appunto in un altro L&F.
    Il punto non è questo. La questione è che se vuoi realizzare una GUI altamente custom e specifica, allora hai una esigenza davvero molto particolare che pochissimi hanno. E quindi devi trovare soluzioni "avanzate" che potrebbero andare dal creare dei componenti completamente custom (e già qui non è semplice) ad addirittura creare un L&F totalmente nuovo (e questo richiede conoscenze elevatissime sugli internals di Swing).
    In alternativa, più semplicemente, cercare in rete un L&F che ti piaccia e faccia al caso tuo (ne esistono tanti). Oppure abbandonare Swing e passare es. a JavaFX che è molto più avanzato di Swing (so che può stilizzare i componenti tramite CSS). Solo che JavaFX ha una architettura ben più complessa di Swing e se già Swing non lo conosci bene, JavaFX non ci metti di meno ad impararlo ... ma molto di più!
  • Re: Realizzare GUI personalizzate

    Ho cercato un po' su Google e penso che la soluzione di JavaFX + CSS sia quella più semplice e fattibile per me. Ho letto che di default utilizza un file modena.css quindi, personalizzandolo, si può ottenere la propria interfaccia personalizzabile. Premetto che non ho mai creato un progetto: "JavaFX Application", non ci dovrebbero essere differenze con un'applicazione Java normale (persona l'espressione infelice XD), giusto?
  • Re: Realizzare GUI personalizzate

    Concordo con Andbin sul fatto che i GUI builder in genere creano codice Java talmente complesso e contorto da renderlo praticamente impossibile da modificarlo manualmente.
    Questo non tanto perchè chi ha scritto il tool ha fatto un cattivo lavoro ma perchè generare in automatico codice (Java in questo caso) complesso come quello di una GUI e che allo stesso tempo sia anche leggibile è molto difficile.

    La cosa invece cambia parecchio se al posto di Swing/Awt (non mi pronuncio su SWT perchè non lo conosco) si usa JavaFX.
    Le GUI vengono scritte con un approcio completamente diverso rispetto alle controparti, ovvero in maniera simile alle pagine web (html, css e js).
    Mettendo in parallelo una pagina web con una GUI di JavaFX si ha che:
    html -> fxml, ovvero xml che rappresenta i componenti grafici statici o comunque già prefissati dal framework
    css -> css, molto simile a quello delle pagine web
    js (inteso come manipolazione dinamica del DOM) -> java; nel caso serva manipolare dinamicamente il dom del fxml si può usare Java e lavorare sugli oggetti come avviene in Swing

    Nel caso di JavaFX un GUI builder (Es SceneBuilder) deve quindi generare solo del semplice codice XML e CSS (compito molto più semplice rispetto al generare codice Java) il quale è leggibile e quasi identico a quello che si scriverebbe a mano.

    Come però ti è stato già detto, JavaFX è molto più complesso di Swing. Impone di usare una particolare architettura che influenza gran parte dell'applicazione. La curva di apprendimento è abbastanza ripida e serve un bel po' di studio iniziale prima poter iniziare a scrivere qualcosa.
  • Re: Realizzare GUI personalizzate

    Grazie mille anche per il tuo intervento. A questo punto vi chiedo se esistano delle risorse online da cui apprendere. Non mi spaventa imparare da autodidatta, al massimo se ho qualche problema specifico posso far riferimento al forum (penso).
  • Re: Realizzare GUI personalizzate

    Scusa per la risposta così tardiva, mi son perso la notifica del tuo ultimo messaggio.
    vi chiedo se esistano delle risorse online da cui apprendere
    Sinceramente non saprei, io ti consiglio di prendere un manuale di JavaFX 8 e studiarti quello.
    Se proprio vuoi dare una sbirciata a JavaFX prima di affrontare la spesa del manuale, puoi dare un occhiata a questo tutorial: http://code.makery.ch/library/javafx-8-tutorial/it . Ti spiega passo passo come realizzare una semplice applicazione ma molti argomenti sono affrontati molto superficialmente.
  • Re: Realizzare GUI personalizzate

    Kohei ha scritto:


    vi chiedo se esistano delle risorse online da cui apprendere.
    Vedi anche https://docs.oracle.com/javase/8/javase-clienttechnologies.htm
  • Re: Realizzare GUI personalizzate

    Grazie mille ad entrambi
Devi accedere o registrarti per scrivere nel forum
9 risposte