Come Creare una GUI con Swing in Java

In questo articolo imparerai come creare un'applicazione simile a quella mostrata in figura; inoltre, ti verrà fornito anche il codice sorgente.

Per inserire pulsanti, etichette e altri componenti nella finestra del programma, devi prima di tutto studiarti JPanel. JPanel è una specie di contenitore di componenti, che occupa lo spazio nella finestra e arrangia visivamente i componenti che hai deciso di utilizzare. Come sono arrangiati esattamente questi componenti dipende dal layout che hai assegnato al pannello. Per programmare manualmente, dovrai studiare almeno il BorderLayout, il quale posiziona quattro componenti ai lati e un componente al centro, poi dovrai studiare anche il FlowLayout, che invece arrangia i componenti in file orizzontali ed infine il GridLayout, che posiziona i componenti in una tavola arbitraria n*. Ce ne sono anche altri, che però potrebbero risultare troppo complessi al programmatore principiante, e dunque non verranno elencati. Il concetto fondamentale che devi comprendere è che un "componente" può essere non solo un pulsante o una casella di spunta, ma anche un altro "JPanel". Così, posizionando pannelli l'uno dentro l'altro e scegliendo un layout per ognuno di loro, potrai creare un'interfaccia utente molto complessa. Dopo aver creato un'istanza di "JPanel", usa il metodo ".setLayout" per impostare il layout e poi utilizza ".add" per aggiungere componenti. Per il "BorderLayout", dovrai impostare anche delle coordinate come secondo parametro. Per esempio, chiama "myPanel.add(myButton, BorderLayout.North)" per posizionare un pulsante nell'angolo in alto. Il contenitore "top level", che appare sulla schermata che rappresenta l'applicazione Java, non è un "JPanel" ma un "JFrame". Chiama "myJFrame.getContentPanel().add(myJPanel, BorderLayout.Center)" per aggiungere il pannello "main" all'instanza "JFrame". Per fare in modo che la tua applicazione, oltre ad apparire sullo schermo, faccia anche altro devi studiare l'interfaccia "ActionListener". Qualsiasi "ActionListener" non astratto ha il suo metodo, "actionPerformed", che viene chiamato automaticamente quando l'utente fa un'"azione" nel componente su cui è registrato il "listener" (l'azione, per quanto riguarda i pulsanti, ad esempio, sarebbe la pressione sul pulsante). Per registrare un action listener per un pulsante o altro componente, usa il metodo .addActionListener..

Metodo 1 di 2:
Creare il Frame Principale

  1. 1
    Crea una classe che estenda la classe "JFrame". Questa classe conterrà tutti i componenti della GUI, come pulsanti e caselle di testo.
  2. 2
    Disegna il layout della tua prima applicazione. Un buon inizio potrebbe essere un pannello centrale con "BorderLayout" con un altro pannello in fondo ("BorderLayout.South"). Questo secondo pannello potrebbe utilizzare il "FlowLayout" e contenere diversi pulsanti, caselle di spunta e controlli simili. In fine, posiziona una grossa "JTextArea" al centro del componente centrale. Potrai utilizzare le funzioni "getText()" e "setText()" per creare delle interazioni di testo con l'utente.
  3. 3
  4. 4
    Scrivi le funzioni principali, che saranno il punto di ingresso del programma. In questo modo, crea un'istanza del frame, imposta posizione e dimensioni iniziali (utilizzando ."setSize(x,y)") e .setLocation(width, height)') e assicurati che essi appaiano sullo schermo utilizzando .setVisible(true).
    Pubblicità

Metodo 2 di 2:
Programmare le risposte a un'azione da parte dell'utente

  1. 1
    Implementa l'interfaccia "ActionListener" nel frame. In questo modo, la tua classe resterà in ascolto per le interazioni coi componenti da parte dell'utente.
  2. 2
    Per ogni pulsante, casella di spunta o altro controllo che hai creato, utilizza questa funzione."addActionListener", passando come parametro il nome del tuo frame ("this").
  3. 3
    Bypassa la funzione astratta di ActionListener "actionPerformed(ActionEvent event)". Così facendo, dovrai inserire delle istruzioni "if" per controllare la provenienza dell'azione. L'istruzione "if" dovrebbe contenere una condizione del genere ""if (event.getSource() == button1")". Questa istruzione controlla l'origine dell'evento e qual ora l'evento abbia avuto origine dal tuo pulsante. All'interno dell'istruzione "if", scrivi l'azione che vuoi che venga completata alla pressione del pulsante.
  4. 4
    JTextArea ha una funzione .setText("myText"). Questo, è un buon modo per inserire delle risposte testuali visive all'azione.
    Pubblicità

Consigli

  • Se vuoi imparare a disegnare i tuoi propri oggetti grafici (come una scacchiera), studia il componente Canvas. Quest'ultimo può essere posizionato nella tua applicazione proprio come tutti gli altri, ma dovrai utilizzare la funzione .paint, la quale è responsabile del disegno del componente sullo schermo.
  • Un componente Swing utile in molte applicazioni pratiche è JTable. Dopo aver imparato le basi, studialo subito.
  • Implementare ed utilizzare l'interfaccia "MoustListener" non è molto più difficile di ciò che è stato spiegato fin'ora. Inserisci ."addMouseListener" per registrarlo su ogni componente.
  • Se vuoi che il tuo programma chieda una stringa di testo in input, utilizza la funzione statica JOptionPane.showInputDialog(this, "Messaggio"). Il primo parametro dovrà essere il frame dell'applicazione stessa o un pannello (la casella di input apparirà al centro del pannello principale). Questa funzione ritorna il valore inserito dall'utente nella finestra di dialogo.
  • È possibile inserire tutti i componenti in un singolo pannello utilizzando il "GridBagLayout", questa classe però, è più difficile da imparare.
Pubblicità

Avvertenze

  • Alcuni ambienti di sviluppo permettono di comporre Swing GUI utilizzando metodi "user friendly". Questi programmi però, non permettono di creare correttamente un pannello con funzioni complesse. Tra queste funzioni includiamo alberi, tavole, liste, caselle combo che cambiano il proprio contenuto mentre il programma sta girando e anche componenti con modelli dati personalizzati e così via. Il codice, composto inizialmente in maniera "user friendly", potrebbe diventare un vero incubo quando successivamente avrai bisogno di modificarlo e/o completarlo manualmente. Dunque, non abituarti troppo a questi programmi di design GUI, altrimenti limiterai fortemente le tue possibilità di programmatore.
  • Swing è un'applicazione single thread. Se la gestione delle azioni sta richiedendo troppo tempo di calcolo, si bloccherà finché non ritorni il metodo ".actionPerformed". Impara ad utilizzare Java in multithreading per tener vivo "Swing" e utilizzare processi esosi di risorse nello stesso tempo.
  • La maggior parte dei metodi dei componenti Swing possono essere chiamati in sicurezza dal'Event Dispatching Thread (quello che chiama ".actionPerformed" e altri metodi simili). Se devi chiamare questi metodi da qualche altro thread (per esempio, per aggiornare una barra di progresso o mostrare il risultato di qualche processo lungo), studiati il metodo "SwingUtils.invokeLater".
Pubblicità

Codice Sorgente

{{{1}}}

Informazioni su questo wikiHow

wikiHow è una "wiki"; questo significa che molti dei nostri articoli sono il risultato della collaborazione di più autori. Per creare questo articolo, 25 persone, alcune in forma anonima, hanno collaborato apportando nel tempo delle modifiche per migliorarlo.
Categorie: Programmazione

Riferimenti

  1. The Java API - Contains documentation on all predefined classes.

Hai trovato utile questo articolo?

No
Pubblicità