JAVA 从SWING的Model 初探MVC思想

本文作者通过实现一个记账项目,探讨了SWING中MVC模式的应用。作者指出,ComboBoxModel和TableModel是SWING实现MVC模式的一部分,Controller可能与View交织在一起,而Listener的归属存在争议。作者分享了StackOverflow上的观点,即Listener应在View层但由Controller管理,以保持组件的封装。最后,作者认识到SWING并非标准的MVC设计,而是M+VC,并讨论了MVC模式的局限性和在实际开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近尝试写一个记账的项目来巩固JAVASE的知识,顺便学习真正的项目该如何一点点构建,看了个类似的项目叫一本糊涂账,来自 http://how2j.cn/k/hutubill ,因为没有认真看过swing的知识,所以在用到ComboBox和Table的时候对于ComboBoxModel和TableModel这两个需要写的model有些疑惑。

因为是GUI,又有Model,我就很自觉的想:这个是不是就是天天说的MVC模式?于是google了一下,果然,SWING是MVC的方式写的。我目前的理解是,建一个JTable必须指定一个专门的TableModel来规定该Table的显示时的内部逻辑和规则,TableModel这个接口定义了:

public getColumnCount() //得到列数的规则
public Object getValueAt(int rowIndex, int columnIndex) //得到指定位置的值的规则
public int getRowCount()//得到行数的规则

这个规则是逻辑行为,而JTable创建出来之后,只能按照这个逻辑行为对user进行展示,按照这个发展,Swing的Controller应该是在和View糅合在一起了,毕竟用户跟UI交互的时候又想有业务,又想有界面显示,很难区分。只有把View中的UI和Listener绑定的过程,使得点击某个UI如提交表单时,可以调用相应的Listener这个环节属于Controller吧,我觉得Listener应该不属于Controller,因为Controller应该不涉及对Model具体的调整;UI自然也有View层,它根据Model把内容显示出来。Controller和View都是一些基于Model的方法,没有任何状态!

暂时是这样理解的…

找了很多帖子,明天早上上完课认真看一下,中午再更新。未完待续。

按照上述思路MVC层实现

https://blog.youkuaiyun.com/YoutellIdo/article/details/48145755
TestModel.java

package model;

public class TestModel {
   
   
    private String message;

    public String getMessage(){
   
   
        return message;
    }
    public void setMessage(String message){
   
   
        this.message=message;
    }
}

TestView.java

package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JPanel
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值