Quando faccio un’applicazione con Swing, ho visto persone fare una delle due cose per creare una JFrame. Qual è un approccio migliore e perché?
Sono un principiante in Java e in programmazione. La mia unica fonte di apprendimento è libri, YouTube e Stack Overflow.
import {imports}; public class GuiApp1 { public static void main(String[] args) { new GuiApp1(); } public GuiApp1() { JFrame guiFrame = new JFrame(); guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); guiFrame.setTitle("Example GUI"); guiFrame.setSize(300,250); ................ }
E
import {imports}; public class GuiApp1 extends JFrame { public Execute() { getContentPane().setBackground(Color.WHITE); getContentPane().setLayout(null); setSize(800, 600); ............. } public static void main(String[] args) { Execute frame1 = new Execute(); frame1.setVisible(true); } }
Pensieri:
getX()
e getY()
per vedere cosa intendo!). Preferisci la composizione rispetto all’ereditarietà .
Il secondo esempio utilizza l’ereditarietà, ma senza una buona ragione, dal momento che non modifica la funzionalità di JFrame
.
Per inciso, se questi sono esempi di codice che stai vedendo, trova una nuova fonte supplementare . Anche nelle poche righe di codice mostrate, ognuna fa cose altamente discutibili. PER ESEMPIO
getContentPane().setBackground(Color.WHITE); getContentPane().setLayout(null); setSize(800, 600);
getContentPane()
) non è stata necessaria da Java 1.5 null
, che si spezzerà in più modi che posso contare o descrivere. pack();
JFrame guiFrame = new JFrame(); guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); guiFrame.setTitle("Example GUI"); guiFrame.setSize(300,250);
JFrame guiFrame = new JFrame("Example GUI");
guiFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Alcuni spesso non forniscono (o mai) esempi autonomi come fanno alcuni di noi (e non considerano tali esempi necessariamente per il design OO in opposizione alla sola tecnica), ma qualunque sia il codice che forniscono, o il consiglio che danno , dovrebbe essere altamente considerato.
Personalmente, il primo approccio (creare un’istanza di JFrame
) è preferito, preferisco questo perché …
Non blocca la tua applicazione in un contenitore dedicato … vedi molte persone che vogliono aggiungere applet a frame e frame alle applet, se avessero messo la maggior parte della GUI in un JPanel
per iniziare, non avrebbero avere questi problemi
Significa anche che l’interfaccia utente che crei è molto più flessibile. Ad esempio, puoi riutilizzarlo, sia nell’applicazione corrente che nelle applicazioni future, non ti blocchi.
Il problema principale che ho con l’estensione di JFrame
è che in realtà non stai aggiungendo nuove funzionalità o funzionalità, che potrebbero essere riutilizzate in modo efficace oltre l’utilizzo di setVisible
L’altro problema che ho con l’estensione di JFrame
è che le persone sovrascrivono prontamente la paint
, il che è davvero molto brutto. Ci sono così tanti problemi nel fare ciò che è semplicemente doloroso doverli elencare ripetutamente …
Quindi … per più di 2 centesimi. Crea un’istanza di JFrame
e aggiungi il tuo contenuto. Se necessario, crea un metodo static
chiama showMyAwesomeGUI
che lo fa per te …
Il primo approccio è migliore.
In genere non si aggiungono nuove funzionalità al frame, quindi è consigliabile creare un’istanza diretta della class.
Vai per il primo approccio.
Perché con quello puoi avere più fotogrammi da creare. Perché l’applicazione può avere più di una finestra. Come nel secondo caso non puoi creare più fotogrammi.
Non importa.
Ci sono dei motivi per cui potresti fare l’uno o l’altro, ma in assenza di questi motivi non fa alcuna differenza.
Ora, se scrivessi qualcosa che potrebbe funzionare dalla riga di comando o potrebbe essere un programma GUI, ovviamente potresti volere una class ‘principale’ che non fosse una class GUI.
Se hai lavorato in un negozio di programmazione in cui uno o l’altro era lo standard, segui assolutamente lo standard. Non c’è una risposta giusta a questo, e in effetti molto poco da scegliere tra loro.