解釋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 支援多種外觀,目前支援Windows、UNIX、Motif 和原生 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(); } }); } }
輸出
廣告