解釋Java Swing在Java中的架構?


Java Swing 是一套API,它為Java程式提供了圖形使用者介面 (GUI)。Java Swing是基於早期名為抽象視窗工具包 (AWT) 的API開發的。Java Swing提供了比AWT更豐富、更復雜的GUI元件。GUI元件範圍從簡單級別到複雜的樹表格。Java Swing 提供了可插拔外觀,使Java程式的外觀與底層平臺無關。

Java Swing 的特性

Java Swing 是平臺無關的,並遵循 MVC (模型-檢視-控制器) 框架。

  • 可插拔外觀 − Java Swing 支援多種外觀,目前支援WindowsUNIXMotif原生 Java 金屬外觀,並允許使用者在執行時切換外觀,無需重新啟動應用程式。透過這種方式,使用者可以即時選擇最適合自己的外觀。
  • 輕量級元件 − 除了某些頂級容器之外,所有 Java Swing 元件都是輕量級的。輕量級意味著元件使用Graphics 物件的繪圖原語進行自身渲染或繪製,而不是依賴於主機作業系統 (OS)。因此,應用程式的呈現速度更快,並且消耗的記憶體比之前的 Java GUI 應用程式(如 AWT)更少。
  • 簡化的MVC − Java Swing 使用簡化的模型-檢視-控制器架構 (MVC) 作為其每個元件(稱為模型-委託)背後的核心設計。基於此架構,每個 Java Swing 元件都包含一個模型和一個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();
         }
      });
   }
}

輸出

更新於:2020年2月24日

2K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告