Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでSwingコンポーネントが軽量であるのに、なぜAWTコンポーネントは重量があるのですか?


  • AWT Abstract Window ToolKitの略で、JavaGUIプログラミングをサポートします。これは、スタンドアロンJavaアプリケーション/アプレット用のポータブルGUIライブラリです。 AWTは、 Java Swing を使用しながら、アプリケーションとネイティブGUI間の接続を提供します。 AWTテクノロジーに基づいて構築された一連のGUIコンポーネントを実装し、プラグイン可能なルックアンドフィールを提供できます。 。 Java Swingは、完全にJavaプログラミング言語で実装されています。
  • まず、重量が大きいということは、コードの読み込みに比較的時間がかかり、より多くのシステムリソースを消費することを意味します。 AWTは、そのコンポーネントが基盤となるオペレーティングシステムに依存しているため、重量があると見なされます。たとえば、 java.awt.Checkboxのオブジェクトを作成する場合 クラス、その基盤となるオペレーティングシステムは私たちのためにチェックボックスを生成します。これが理由でもあり、AWTコンポーネントはプラットフォームに依存しています。
  • 一方、ほとんどの Java Swing コンポーネントはJava自体に実装されています。ウィンドウなどのトップレベルのコンポーネントの一部は、オペレーティングシステムに依存しています。それでも、プログラム全体はAWTよりも比較的軽量です。
  • Java Swing AWTの高度で最適化されたバージョンです そしてそれはAWTの上に構築されています。それでも、多くのAWTクラスはSwingで直接または間接的に使用されます。 Java Swingに進む前に、AWTの基本を実行することが重要です。そうしないと、JavaでGUIを使用しているときに、いくつかの制御委任に関する基本的な事実を理解できません。

import javax.swing.SwingUtilities;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Test {
   public static void main(String[] args) {
      ApplicationWindow window = new ApplicationWindow();
      window.setVisible(true);
   }
}
class ApplicationWindow extends JFrame {
   public ApplicationWindow() {
      this.setSize(200, 100);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setLayout(new FlowLayout());
      Button exitButton = new Button("Exit");
      exitButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event) {
            System.exit(0);
         }
      });
      this.add(exitButton);
      JMenuBar menuBar = new JMenuBar();
      JMenu menu = new JMenu("Overlapping Menu");
      JMenuItem menuItem = new JMenuItem("Overlapping Item");
      menu.add(menuItem);
      menuBar.add(menu);
      this.setJMenuBar(menuBar);
      this.validate();
   }
}

出力

JavaでSwingコンポーネントが軽量であるのに、なぜAWTコンポーネントは重量があるのですか?


  1. JavaでのJavaSwingのアーキテクチャを説明しますか?

    Java Swing は、グラフィカルユーザーインターフェイス( GUI )を提供するAPIのセットです。 )Javaプログラムの場合。 Java Swingは、 Abstract Windows Toolkと呼ばれる以前のAPIに基づいて開発されました。 それ(AWT)。 Java Swingは、AWTよりも豊富で洗練されたGUIコンポーネントを提供します。 GUIコンポーネントは、単純なレベルから複雑なまでさまざまです。 ツリー およびテーブル 。 Java Swingは、プラグ可能なルックアンドフィールを提供します 基盤となるプラットフォームから独立したJavaプログラムのルックアンド

  2. SwingはJavaでスレッドセーフですか?

    いいえ、 Java Swing コンポーネントはJavaではスレッドセーフではありません。 Swingコンポーネントがスレッドセーフではない理由 Java Swingがスレッドセーフではない主な理由の1つは、そのコンポーネントを拡張するタスクを簡素化することです。 Java Swingのもう1つの理由は、ロックの取得と解放、および状態の復元に伴うオーバーヘッドのため、スレッドセーフではありません。 。 一部のJavaSwingコンポーネントメソッドは、 repaint()、revalidate()などのマルチスレッドアクセスをサポートします。 、および invalidate()メソッド