解釋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();
}
});
}
}輸出
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP