7

通常、クラスを作成するとき、たとえばCustomer、いくつかのデータ フィールド、つまりpublic int IdNumber;いくつかのメソッドを指定しpublic String getName(){...}ます。しかし、それだけです。それを超えてグラフィックスで遊ぶことはできません。クラスで許可されている範囲でのみ、データを操作および整理できます。

JFrame 内で何が起こっているのか理解できません。クラス JFrame を作成した人は誰でも、画面にボックスを表示できるクラスをどのように作成したのでしょうか? これを引き起こす内部で何が起こっているのですか?とにかくそれをエミュレートすることはありますか?

同じ質問が、すべてのグラフィックベースの Java クラスに当てはまります。使用するたびに気になるので、どのように機能するのか非常に興味があります。

4

3 に答える 3

4

Java はawt (Abstract Windowing Toolkit) で始まり、後にswingが導入されました。

AWTでは、プラットフォームのイベント処理ループがフックされ、イベントは独自の Java クラスにパックされ、1 つの (非並列) イベント処理キュー/スレッドがそれらを次々に処理します。Swing はこれを継承しています。

AWTでは、ラジオ ボタンやメニュー項目などのすべての GUI コンポーネントに、プラットフォームが提供するコンポーネントであるネイティブ コードの「ピア」コントロールがあります。Java クラスとそれに対応する C の並列セットがあります。特に興味深いのは、線や長方形などのカスタム描画を可能にする Java Graphics クラスです。おそらく、CDC(デバイスコンテキスト)を使用してWindowsでピアリングされます。

Swingでは、ほとんどのプラットフォーム コンポーネントがエミュレートされます。つまり、描画、マウス操作など、自分自身を再作成します。したがって、ネイティブ部分はより単純です。たとえば、カスタム描画を使用した CWnd (ウィンドウ コンポーネント) などです。

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 レンダリングは、プラットフォーム レンダリングに基づいています。また、プロパティベースであるため、チェックボックスは必ずしもブール値にバインドされるとは限りませんが、変更を監視および通知するブール値のプロパティです。最適なアーキテクチャを考えるには、まだ実践的な経験が必要です。

于 2013-05-08T13:39:20.540 に答える
2

ボックスは画面にどのように表示されますか? この機能は、オペレーティング システムによって JVM に提供されます (Linux 上の X Window System によって)。

Java レベルでは、JFrame は、ネイティブウィンドウ システムによって提供される「ネイティブ ピア」を持つ java.awt.Window から継承し ます。

どうしても理解したい場合は、C のみを使用していくつかのウィンドウを作成してみるとよいでしょう。

于 2013-05-08T13:24:00.470 に答える