Java è iniziato con AWT (Abstract Windowing Toolkit) e successivamente introdotto altalena.
In AWT il ciclo di gestione eventi della piattaforma viene agganciato e gli eventi sono impacchettati nelle proprie classi java e una singola coda (non parallela) che gestisce la coda/thread li gestisce, uno dopo l'altro. Swing eredita questo.
In AWT Ogni componente della GUI, come il pulsante di opzione o la voce di menu, ha un controllo "peer" del codice nativo, il componente fornito dalla piattaforma. Esiste un insieme parallelo di classi java e la loro controparte C. Particolarmente interessante è la classe java Graphics che consente il disegno personalizzato di linee, rettangoli e simili. Viene visualizzato sotto Windows con un CDC (Device Context), presumibilmente.
In Swing la maggior parte dei componenti della piattaforma viene emulata, ovvero ricreata: il disegno, la gestione del mouse e così via. Quindi la parte nativa è più semplice, diciamo forse un CWnd (componente Window) con un disegno personalizzato.
L'oscillazione può ottenere una funzionalità più coerente e più ricca di funzionalità. È possibile immaginare che l'impostazione di un colore di sfondo su un pulsante di opzione AWT potrebbe non essere possibile oppure utilizzare l'HTML su un'etichetta o un suggerimento. Anche Swing può fare skinning, temi, LookAndFeels. Il sistema System ha un'impressione simile ai componenti della piattaforma. Particolarmente i componenti Swing sono più leggero, poiché non tutti i componenti hanno un controllo peer nativo da gestire in C.
Ora SWT è stata una successiva iniziativa di IBM realizzata in eclissi per AWT ricaricato. Non è personalizzabile come Swing ma è concepito per essere vicino alla piattaforma.
Si dovrebbe dimenticare di utilizzare i componenti AWT e, se non si esegue la programmazione per Eclipse RCP, anche SWT.
Quindi: eventi piattaforme globali come un clic del mouse, ridipingere richiesta sono tradotti agli eventi Java. Esiste una gerarchia di contenitori di JFrame, JPanels, JScrollPanes, JComponents. Un evento viene inviato ai componenti di gestione, su cui ad esempio paintComponent si chiama:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g; // A later introduced class that can do more.
g2.draw...
}
Con JavaFX arriva un nuovo giocatore, che è secondo me non è ancora completamente maturo, ma utilizzabile nel codice non di produzione. Abilita effetti/animazioni, rotazioni, trasformazioni, luce. Quindi un rendering 2D - 4D, basato sul rendering della piattaforma simile. Inoltre è basato sulla proprietà, quindi una casella di controllo non dovrebbe necessariamente essere associata a un valore booleano, ma a una proprietà booleana che osserva e notifica le modifiche. Mi serve ancora qualche esperienza pratica, per concepire un'architettura ottimale con esso.
Questa è forse pericolosamente vicino alla "Potrebbe scrivere un libro su in modo troppo ampio", ma sarei affascinato conoscere la risposta a prescindere –
Credo che utilizza il sistema operativo sottostante per visualizzarli – Sam
e non sei sorpreso su tutte le classi di networking, per esempio? È esattamente la stessa cosa La VM utilizza qualsiasi API nativa disponibile sulla piattaforma. – Mat