2012-06-20 8 views
5

Esta pregunta podría no parecer muy técnico, pero, por curiosidad, quiero saber que:¿Cómo hace un giro código Entra a una aplicación gráfica verdadera

¿Cómo código de oscilación desnudo/prima escrito por mí, a su vez, en una maravillosa aplicación gráfica?

Por ejemplo:

  • Al igual que cuando hacemos un JFrame visible, o cuando colocamos un JButton en él. ¿Quién lo hace posible? SO o Java o JVM.

  • ¿Quién hace aparecer los colores?

  • ¿Cuál es el proceso detrás de escena?

Lo pregunto tal vez porque es la primera vez en mi vida que hice una aplicación gráfica un mundo real y estas preguntas aparecieron en mi mente!

¡Gracias de antemano!

+0

La JVM a través del sistema operativo :) – GETah

Respuesta

5

En Swing, todos los componentes de la GUI están escritos completamente en Java y se representan con Java. Por ejemplo, JButtons sería dibujado por Java y no por ningún elemento interno del sistema operativo. Por lo tanto, los componentes Swing se denominan "componentes livianos" porque son administrados y representados por Java en lugar de por el sistema operativo (o cualquier kit de herramientas de widgets nativo).

Tenga en cuenta que Java también tiene un kit de herramientas llamado AWT. Swing se basa en métodos anidados y heredados de AWT, excepto que crea widgets nativos utilizando el sistema operativo.

Entonces, en algún momento, Swing tendrá que crear una ventana en la pantalla y dibujar sobre ella. La magia que realmente crea la ventana es manejada por AWT. Observe que JFrame se extiende desde java.awt.Frame, lo que significa que aunque JFrame puede ser renderizado principalmente por Java, está respaldado por una ventana de SO nativa de gran peso.

+1

Esto es parcialmente cierto. Al final, la API 2D de Java depende de las funciones específicas del sistema operativo para pintar en la pantalla, y tiene gráficos acelerados por hardware (DirectX, OpenGL, etc.) –

+1

Lo que es aún más sorprendente, es que puede tomar el mismo programa Java , sin recompilarlo, y ejecutarlo en otro sistema operativo y simplemente funcionará. – Bill

+0

@Bill: si quieres que tu aplicación swing se vea bien en todas las plataformas y LaF, estás en un verdadero dolor de cabeza :) –

0

No conozco todos los detalles, pero los gráficos reales se muestran/renderizan a través de los paquetes swing/awt a través de la propia JVM.

1

En resumen, hay un kit de herramientas AWT, que es la capa que hace toda la gestión de ventanas y el dibujo. Está llamando al código específico de la plataforma nativa dentro de la JVM. También es responsable del dibujo de java2d. Puede usar oleoductos acelerados directos o abiertos.

Swing se desarrolla en la parte superior. Swing realmente dibuja cada botón y cada objeto con código Java simple. El dibujo se maneja con un aspecto actual y se siente que decide cómo dibujar los componentes. De modo que puede anular sus métodos de pintura y agregar algunas cosas adicionales sin ningún problema.

Metal y Nimus LaF son 100% java2d dibujados, por lo que dentro de ellos encontrará elementos como drawRectangle y drawLine para dibujar componentes. El aspecto y las sensaciones nativas, como windows, gtk, acceden al tema de los sistemas operativos actuales para dibujar algo que se parece a los widgets nativos. Es por eso que no siempre se ven como aplicaciones nativas.

También hay otros kits de herramientas de interfaz gráfica de usuario para Java, como SWT, utilizados, por ejemplo, en Eclipse. Lo que está haciendo es obtener la ventana del AWT y luego poner 100% widgets nativos sobre ella. Está mucho mejor integrado con el sistema operativo, se ve mejor, funciona más rápido, usa menos memoria.Pero con eso, tendrías que distribuir tu aplicación con bibliotecas nativas específicas de os y es menos personalizable, en comparación con Swing.

+0

+1 El metal está roto Java2D dibujado, Nimbus está roto L & F :-) – mKorbel

Cuestiones relacionadas