解释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+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.