簡體   English   中英

JFrame如何工作? 在內心深處,它如何繪制東西?

[英]How does JFrame work? Deep inside, how does it draw stuff?

通常,當我創建一個類,例如Customer ,我給它一些數據字段,即public int IdNumber; 和一些方法,即public String getName(){...} 但這就是它。 我不能超越它並開始玩圖形 - 我只能操縱和組織數據,只要類允許。

我無法理解JFrame中發生的事情。 誰寫了JFrame類,他們是怎么寫一個可以讓一個盒子出現在屏幕上的類? 內部會發生什么導致這種情況發生? 無論如何都要模仿它嗎?

同樣的問題適用於所有基於圖形的Java類。 我真的很想知道它是如何工作的,因為每次我使用其中一個都會困擾我。

如果您對Java的實現方式感到好奇,那么您應該看一下源代碼。 http://openjdk.java.net/projects/jdk7/將是一個開始。

當然,這只會讓您深入了解該特定實現,並不意味着您的java以相同的方式實現。

Java以awt (Abstract Windowing Toolkit)開始,后來引入了swing

AWT中 ,平台事件處理循環被掛鈎,事件被打包在自己的java類中,一個(非並行)事件處理隊列/線程一個接一個地處理它們。 Swing繼承了這一點。

AWT中,每個GUI組件(如單選按鈕或菜單項)都具有本機代碼“對等”控件,即平台提供的組件。 有一組並行的java類和它們的C對應物。 特別有趣的是java Graphics類,它允許自定義繪制線條,矩形等。 據推測,它在Windows下與CDC(設備上下文)對等。

Swing中,大多數平台組件都是模擬的,即自己重新創建:繪圖,鼠標處理等。 所以原生部分更簡單,比如可能是帶有自定義繪圖的CWnd(Window組件)。

Swing可以實現更一致且功能更豐富的功能。 您可以想象在AWT單選按鈕上設置背景顏色可能是不可能的,或者在標簽或工具提示上使用HTML。 Swing也可以做皮膚,主題,LookAndFeels。 系統的外觀和感覺是對平台組件的近似模仿。 特別是Swing組件的重量更輕 ,因為並非每個組件都有一個本地對等控件可以在C中處理。

現在SWT是IBM在eclipse中為AWT重新加載實現的后來的一項計划。 不像Swing那樣可定制,但打算靠近平台。

您應該忘記使用AWT組件,如果沒有為eclipse RCP編程也可以使用SWT。

所以:鼠標點擊,重繪請求等全局平台事件被轉換為Java事件。 有一個JFrame,JPanels,JScrollPanes,JComponents的容器層次結構。 將事件分派給處理組件,例如調用paintComponent:

@Override
public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g; // A later introduced class that can do more.
    g2.draw...
}

有了JavaFX ,就會出現一個新的播放器,即恕​​我直言,尚未完全成熟,但可用於非生產代碼。 它可以實現效果/動畫,旋轉,變換,光。 所以2D-4D渲染,基於類似平台渲染。 它也是基於屬性的,因此復選框不一定會綁定到布爾值,而是一個布爾屬性,用於觀察和通知更改。 我還需要一些實踐經驗,用它構思一個最佳的架構。

框如何出現在屏幕上? 操作系統將此功能提供給JVM(通過Linux上的X Window系統)。

在Java級別,JFrame繼承自java.awt.Window,它具有本機窗口系統提供的“本機對等”。

如果您真的想了解它,那么最好只嘗試使用C創建一些窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM