解释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