2012-02-17 13 views

Odpowiedz

5

OpenJDK source jest droga. Musisz tylko trafić w odpowiedni folder. Można zobaczyć kod wewnątrz tak:

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 funkcji można znaleźć w pliku awt_Component.cpp, gdzie nazywa CreateWindowEx funkcję.

+0

Ładne, dobrze znalezione. Czy dowiedziałeś się, skąd te funkcje są wywoływane? – Jivings

+0

Każdy komponent AWT ma klasę peer: reprezentującą komponent natywny. Jeśli spojrzysz na kod źródłowy, zobaczysz, że istnieje kilka natywnych metod Java, które manipulują klasą AWTCheckBox (na przykład) i faktycznie tworzą komponent natywny. Zajrzyj do http://hg.openjdk.java.net/jdk7/awt/jdk/file/23bdcede4e39/src/windows/native/sun/windows/awt_Checkbox.cpp (linia 663). Jest wywoływana z poziomu języka Java w celu utworzenia elementu równorzędnego komponentu AWT. –

+0

Możesz mieć poprawną zaznaczoną odpowiedź, ponieważ najszybciej odpowiedziałeś właściwą odpowiedzią, która miała sens i była pomocna. – Jivings

2

Jest to szczegół wdrożenia. Standardem defacto byłby sposób, w jaki Oracle go wdrożyło. Jeśli naprawdę chcesz się dowiedzieć, spójrz na kod źródłowy. Można go znaleźć pod adresem http://openjdk.java.net/. Linki znajdują się w lewej kolumnie pod polem wyszukiwania. Odpowiednie klasy powinny znajdować się w pakiecie sun.awt.

+0

Przyjrzałem się źródłu tego pakietu. Nadal nie rozumiem, jak natywny kod współdziała z systemem operacyjnym, aby utworzyć GUI. Gdzie mogę znaleźć kod natywny, który dosłownie wyświetla okno? Ponieważ nie wydaje się być w '/ native/sun/awt/*'. – Jivings

+0

http://openjdk.java.net/groups/awt/ powinien pomóc Ci znaleźć odpowiednie części. Wygląda na to, że kod jest rozłożony na wiele katalogów, a niektóre części kodu nie są już używane. –

+0

+1 Kod źródłowy JVM byłby autorytatywną dokumentacją dla tak niskiego poziomu zainteresowania. W przypadku OpenJDK 7, uruchom [tutaj] (http://hg.openjdk.java.net/jdk7/awt/jdk/file/23bdcede4e39/src/). –

-2

Awt robi to, używając metod native. Są to metody java, które odwołują się do metod w języku ojczystym w oddzielnym pliku. Zasadniczo, jeśli używasz Windows i chcesz otworzyć okno, java użyje C++ do otwarcia okna.

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

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

+0

Dzięki, wiem, jakie są metody natywne i jak z nich korzystać. To nie jest moje pytanie. Szukam specyficznych metod natywnych, które wykonują tę interakcję, oraz informacji o * sposobie * ich wykonania. – Jivings

+0

wystarczy google, jak to zrobić z bazą os. jeśli chcesz wiedzieć, jak to robią na komputerze z systemem Windows, Google, jak zrobić okno w C++ –

+0

'Po prostu Google, jak to zrobić.' Wow, dziękuję za twoją pomoc. – Jivings

4

podstawowe:
Większość bibliotek klasy GUI w C++ są od platformy, nie tylko ze względu na różne możliwości sprzętowych, ale subtelnych różnic między "look-and-feel" różnych operacyjnych-Windows systemy. Zestaw narzędzi Java Abstract Window Toolkit udostępnia międzyplatformową bibliotekę , która ma na celu obserwację konwencji różnych platform systemu operacyjnego.

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

Więcej informacji o Java GUI Event Programming

AWT zapewnia dwa poziomy API:

  • Ogólny interfejs między Java i systemie natywnym, wykorzystywane do okienkowych, imprezy, i menedżerów układu. Ten interfejs API stanowi rdzeń programowania w języku Java i jest również używany przez Swing i Java 2D.Zawiera:

    1. Interfejs między rodzimym systemem okienkowym a aplikacją Java;
    2. Rdzeń podsystemu zdarzeń GUI;
    3. Kilka menedżerów układu;
    4. Interfejs do urządzeń wejściowych, takich jak mysz i klawiatura;
          i
    5. java.awt.datatransfer Pakiet do użytku z schowka i przeciągnij i upuść.
  • Podstawowy zestaw widżetów GUI, takich jak przyciski, pola tekstowe i menu.
    Zapewnia także AWT Native Interface, który umożliwia renderowanie bibliotek skompilowanych do kodu natywnego, aby narysować bezpośrednio na powierzchni rysunku obiektu AWT Canvas.

AWT również, że niektóre funkcje wyższego poziomu dostępny do zastosowań takich, jak:
dostęp do systemu na tacy systemów wspomagających; i Możliwość uruchamiania niektórych aplikacji komputerowych, takich jak przeglądarki internetowe i klienty poczty e-mail z aplikacji Java.
Aby uzyskać kod źródłowy dla rdzennych openjdk klasach AWT skorzystać z poniższego linku

jdk6/jdk6-gate/jdk/src/windows/native/sun/
jdk6/jdk6-gate/jdk/src/windows/native/sun/windows/ (zajęcia Windows AWT-native).

OpenJDK (GPL)

  • Sun ogłosił w 2006 roku, że Java staną oprogramowanie open-source.
  • Wydano kompletny kod źródłowy biblioteki klas Java na licencji GPL 8 maja 2007,
  • W dniu 11 października 2010 r. IBM, zdecydowanie największy uczestnik projektu Apache Harmony, zdecydował się dołączyć do Oracle w Projekt OpenJDK, skutecznie przenosząc swoje wysiłki z Harmony na OpenJDK.
  • W dniu 11 stycznia 2011 r. Projekt Mac OS X Port został utworzony na platformie OpenJDK, a firma Apple dokonała pierwszego publicznego wkładu kodu do projektu. Początkowy wkład Apple zbudowany na porcie BSD OpenJDK (OpenJDK™ 6 Source Release).

odniesienia:

[OpenJDK Repositories.]

Open jdk6/jdk6-gate/jdk/src/share/classes/java/awt/ (kod Przykład AWT Pakiet źródłowy)

Głównym OpenJDK project, która opiera się na JDK 7

Możesz dowiedzieć się OpenJDK cechy here

Caciocavallo , Projekt zapewniający oparty na OpenJDK interfejs API Java w celu ułatwienia implementacji AWT w nowych systemach. Proj ect z powodzeniem zaimplementował widgety AWT za pomocą Java2D.
[OpenJDK Mailing list.]

Czytaj AWT Documentation uzyskać klarownej wiedzy na jego implementacji.

Daj się ponieść awt-dev Mailing Lists, aby się zaangażować.

+0

Doskonała odpowiedź, proszę pana. Dziękuję Ci bardzo. – Jivings

+0

Odkryłem to również; http://hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/66a97657a058/src/share/javavm/export/jawt.h – Jivings

+0

to świetnie, jeśli masz wymagane informacje. :) –

Powiązane problemy