2012-02-17 13 views

Respuesta

5

OpenJDK source es el camino a seguir. Solo tienes que presionar la carpeta correcta. Se puede ver código dentro de la siguiente manera:

checkbox = new AwtCheckbox(); 
... 
checkbox->CreateHWnd(env, labelStr, style, exStyle, 
     x, y, width, height, 
     awtParent->GetHWnd(), 
     reinterpret_cast<HMENU>(static_cast<INT_PTR>(
    awtParent->CreateControlID())), 
     ::GetSysColor(COLOR_WINDOWTEXT), 
     ::GetSysColor(COLOR_BTNFACE), 
     peer); 

CreateHWnd función se puede encontrar en el archivo awt_Component.cpp, donde se llama a la función CreateWindowEx.

+0

Agradable, bien encontrado. ¿Encontraste desde donde se llaman esas funciones? – Jivings

+0

Cada componente AWT tiene una clase par: clase, que representa el componente nativo. Si busca en el código fuente, verá que hay varios métodos nativos de Java, que manipulan la clase AWTCheckBox (por ejemplo) y, de hecho, crea el componente nativo. Mire en http://hg.openjdk.java.net/jdk7/awt/jdk/file/23bdcede4e39/src/windows/native/sun/windows/awt_Checkbox.cpp (línea 663). Se llama desde Java para crear el par del componente AWT. –

+0

Puede tener la respuesta correcta marcada porque respondió más rápidamente con una respuesta real que tenía sentido y era útil. – Jivings

2

Es un detalle de implementación. El estándar de facto sería cómo Oracle lo ha implementado. Si realmente quieres saber, echa un vistazo al código fuente. Se puede encontrar en http://openjdk.java.net/. Los enlaces están en la columna izquierda debajo del cuadro de búsqueda. Las clases relevantes deben estar en el paquete sun.awt.

+0

He visto la fuente de ese paquete. Todavía no entiendo cómo el código nativo interactúa con el sistema operativo para crear una GUI. ¿Dónde puedo encontrar el código nativo que literalmente muestra una ventana? Porque no parece estar en '/ native/sun/awt/*'. – Jivings

+0

http://openjdk.java.net/groups/awt/ debería ayudarlo a encontrar las piezas relevantes. Aparentemente, el código está distribuido en muchos directorios, y hay algunas partes del código que ya no se usan. –

+0

+1 El código fuente de JVM sería la documentación autorizada para dicho interés de bajo nivel. Para OpenJDK 7, comience [aquí] (http://hg.openjdk.java.net/jdk7/awt/jdk/file/23bdcede4e39/src/). –

-2

Awt hace esto usando native métodos. Estos son métodos de Java que hacen referencia a métodos en el idioma nativo en un archivo separado. Entonces, esencialmente, si está usando Windows y quiere abrir una ventana, java usará C++ para abrir la ventana.

http://en.wikipedia.org/wiki/Java_Native_Interface

http://en.wikipedia.org/wiki/Java_AWT_Native_Interface

+0

Gracias, sé cuáles son los métodos nativos y cómo usarlos. Esa no es mi pregunta. Estoy buscando los métodos nativos específicos que realizan esta interacción, y la información sobre * cómo * lo realizan. – Jivings

+0

solo google cómo hacerlo con el sistema operativo base. si quieres saber cómo lo hacen en una computadora con Windows, busca cómo hacer una ventana en C++ –

+0

'Solo busca cómo hacerlo Google'. Wow gracias por tu ayuda. – Jivings

4

básica:
La mayoría de las bibliotecas de clases GUI en C++ son específicos de la plataforma, no sólo debido a las diferentes capacidades de hardware, pero las diferencias sutiles entre el "look-and-feel" de diversos operativo de ventanas sistemas. Java Abstract Window Toolkit proporciona una biblioteca multiplataforma que busca observar las convenciones de apariencia de varias plataformas de sistema operativo.

  Toolkit ------------------------------------------------ AWT 
     --------|--------- 
    Button    List           JVM 
    ------|-------------|-------------------------------------------------- 
    Button Peer  List Peer      Native GUI (Windows, Mac, X) 

Más información sobre Java GUI Event Programming

AWT proporciona dos niveles de API:

  • Una interfaz general entre Java y el sistema operativo nativo, que se utiliza para de ventanas, eventos, y administradores de diseño. Esta API es el núcleo de la programación de la GUI de Java y también es utilizada por Swing y Java 2D.Contiene:

    1. La interfaz entre el sistema de ventanas nativo y la aplicación Java;
    2. El núcleo del subsistema de eventos GUI;
    3. Varios administradores de diseño;
    4. La interfaz para dispositivos de entrada como mouse y teclado;
          y
    5. java.awt.datatransfer Un paquete para su uso con el portapapeles y arrastrar y soltar.
  • Un conjunto básico de widgets de GUI como botones, cuadros de texto y menús.
    También proporciona el AWT Native Interface, que permite que las bibliotecas de representación compiladas en código nativo dibujen directamente en una superficie de dibujo de objetos AWT Canvas.

AWT también hace que algunas funciones de alto nivel disponibles para las aplicaciones, tales como:
El acceso a la bandeja del sistema en los sistemas de soporte; y La capacidad de iniciar algunas aplicaciones de escritorio, como navegadores web y clientes de correo electrónico desde una aplicación Java.
para obtener el código fuente de las clases AWT OpenJDK nativos utilizar a continuación enlace

jdk6/jdk6-gate/jdk/src/windows/native/sun/
jdk6/jdk6-gate/jdk/src/windows/native/sun/windows/ (clases de Windows-AWT-nativos).

OpenJDK (GPL)

  • Sun anunció en 2006 que Java se convertiría en software de código abierto.
  • Lanzado el código fuente completo de la Biblioteca de clases Java bajo la GPL el 8 de mayo de 2007,
  • El 11 de octubre de 2010, IBM, con mucho el participante más grande en el proyecto Apache Harmony, decidió unirse a Oracle en el Proyecto OpenJDK, cambiando efectivamente sus esfuerzos de Harmony a OpenJDK.
  • El 11 de enero de 2011, se creó el proyecto Mac OS X Port en OpenJDK, y Apple hizo la primera contribución pública de código al proyecto. La contribución inicial de Apple basada en el puerto OpenJDK BSD (OpenJDK™ 6 Source Release).

Referencia:

[OpenJDK Repositories.]

Open jdk6/jdk6-gate/jdk/src/share/classes/java/awt/ (código de ejemplo AWT paquete de código fuente)

La principal OpenJDK project, que se basa en JDK 7

puede averiguar características OpenJDK here

Caciocavallo , Proyecto que proporciona una API Java basada en OpenJDK para facilitar la implementación de AWT en nuevos sistemas. El proyecto ect ha implementado con éxito widgets AWT utilizando Java2D.
[OpenJDK Mailing list.]

Leer AWT Documentation para obtener un conocimiento claro de las implementaciones en él.

Fallow awt-dev Mailing Lists para involucrarse.

+0

Excelente respuesta señor. Muchas gracias. – Jivings

+0

También descubrí esto; http://hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/66a97657a058/src/share/javavm/export/jawt.h – Jivings

+0

es genial, si tienes información requerida. :) –

Cuestiones relacionadas