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

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


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

JavaSwingの機能

Java Swingはプラットフォームに依存せず、MVC(Model View and Controller)フレームワークに従います。

  • プラッグ可能なルックアンドフィール- Java Swingは、いくつかのルックアンドフィールをサポートします 現在、 Windowsをサポートしています 、 UNIX モチーフ 、およびネイティブJavaメタルのルックアンドフィール また、ユーザーはアプリケーションを再起動せずに実行時にルックアンドフィールを切り替えることができます。これにより、ユーザーは自分に最適なルックアンドフィールを即座に選択できるようになります。
  • 軽量コンポーネント- すべてのJavaSwingコンポーネントは軽量です 一部のトップレベルコンテナを除く 。 軽量 コンポーネントがグラフィックスの描画プリミティブを使用してそれ自体をレンダリングまたはペイントすることを意味します ホストオペレーティングシステム( OS )に依存する代わりにオブジェクト )。その結果、アプリケーションのプレゼンテーションがより高速にレンダリングされ、消費されるメモリが少なくなります AWTのような以前のJavaGUIアプリケーションよりも。
  • 簡略化されたMVC- Java Swingは、単純化されたModel-View-Controllerアーキテクチャを使用します ( MVC model-delegateと呼ばれる各コンポーネントの背後にあるコアデザインとして 。このアーキテクチャに基づいて、各JavaSwingコンポーネントにはモデルが含まれています およびUIデリゲート ビューをラップします およびコントローラー MVC アーキテクチャUIデリゲート 画面のペイントとGUIイベントの処理を担当します。モデルは、コンポーネントの情報または状態の維持を担当します。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// model part
class Model {
   private int x;
   public Model() {
      x = 0;
   }
   public Model(int x) {
      this.x = x;
   }
    public void setX(){
      x++;
   }
   public int getX() {
      return x;
   }
}
// view part
class View {
   private JFrame frame;
   private JLabel label;
   private JButton button;
   public View(String text) {
      frame = new JFrame("View");
      frame.getContentPane().setLayout(new BorderLayout());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(200,200);
      frame.setVisible(true);
      label = new JLabel(text);
      frame.getContentPane().add(label, BorderLayout.CENTER);
      button = new JButton("Button");
      frame.getContentPane().add(button, BorderLayout.SOUTH);
   }
   public JButton getButton() {
      return button;
   }
   public void setText(String text) {
      label.setText(text);
   }
}
// controller part
class Controller {
   private Model model;
   private View view;
   private ActionListener actionListener;
   public Controller(Model model, View view) {
      this.model = model;
      this.view = view;
   }
   public void contol() {
      actionListener = new ActionListener() {
         public void actionPerformed(ActionEvent actionEvent) {
            linkBtnAndLabel();
         }
      };
      view.getButton().addActionListener(actionListener);
   }
   private void linkBtnAndLabel() {
      model.setX();
      view.setText(Integer.toString(model.getX()));
   }
}
// main class
public class Main {
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         @Override
         public void run() {
            try {
// Look and Feel, Java Look and Feel
               UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception ex) { }
            Model model = new Model(0);
            View view = new View("-");
            Controller controller = new Controller(model,view);
            controller.contol();
         }
      });
   }
}

出力

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


  1. 長方形の周囲を見つけるJavaプログラム

    この記事では、長方形の周囲を見つける方法を理解します。長方形の周囲長は、長方形のすべての辺の長さを加算して計算されます。 以下は長方形のデモンストレーションです。長方形の周囲は、長方形の2つの長さと2つの幅の全長です- 入力 入力が-であると仮定します The length of the sides of a rectangle are : 5, 8, 5, 8 出力 必要な出力は-になります Perimeter : 26 アルゴリズム Step 1 – START Step 2 – Declare 5 floating point variabl

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

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