我想学习如何将MVC架构应用到我的Java项目中; 主要是我在Swing的工作.现在没有简单的解释或示例如何使用MVC编写正确的代码,除了我在这里找到的这两个:
在我看来,Java中没有定义的MVC架构.从我看到的是Java在Wwing的基础层面为您提供的内容以及您可以自行应用的内容在第一个教程中.
除了上面的两个资源,有人可以为我提供一个可以让你轻松进入Java MVC的源代码吗?可能是一个视频教程?
我是桌面应用程序开发的新手,今年夏天我有一个非常大的项目.问题是代码必须非常清晰,所以当我更新代码时,我不会遇到麻烦.
结果,我想要一个良好的"关注点分离".对我来说最困难的部分是视图 - 控制器分离.
现在,我已经阅读了很多教程,讨论等.我已经以3种不同的方式设计了一个迷你应用程序.该应用程序很简单:单击将标签转换为"Hello world"的按钮.
你怎么看待这3个设计?
有没有更好的设计来满足我的期望?
View1.java:
public View1() {
initComponents();
this.controller = new Controller1(this);
}
private Controller1 controller;
public void updateLabel(String message){
this.jLabel1.setText(message);
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.controller.doSomething();
}
private void initComponents() {
...
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
...}
Run Code Online (Sandbox Code Playgroud)
Controller1.java:
public class Controller1 {
public Controller1(View1 v){
this.view = v;
}
public void doSomething(){
this.view.updateLabel("Hello world");
}
private View1 view;
}
Run Code Online (Sandbox Code Playgroud)
View2.java:
public View2() {
initComponents(); …Run Code Online (Sandbox Code Playgroud) 如果您想了解更多详情,请告诉我们,或参考此问题的最后几行.我已经阅读了很多内容,我觉得我正在把一些简单的东西变成复杂的东西而且我仍然被困在那里,所以也许你可以在那些非常具体的方面帮助我.
我使用的是Netbeans IDE 7和JDK 7,没有框架.第一个窗口是JFrame,所有其他窗口都是JDialogs,模态=真.
问题:
如何使用swing正确实现MVC模式?从下面的想法哪一个更好:(A)或(B)?或者可能是另一个......为什么它更好?
(A)主要:
MyModel model
MyView view(model)
Run Code Online (Sandbox Code Playgroud)
我的看法:
MyController(this, model)
Run Code Online (Sandbox Code Playgroud)
(B)
主要:
MyModel model
MyView View
MyController controller(view, model)
Run Code Online (Sandbox Code Playgroud)当我在MainFrame中单击jbutton1时,我需要它来打开SettingsFrame进行编辑设置.我应该在哪里实例化SettingsFrame的View,Model和Controller?在MainFrame控制器?
在MVC组织和实现方面,我应该如何处理(显然)缺少一个或两个MVC"支路"(模型或视图或控制器)的更多特定功能?我应该为他们创建空课吗?
a. The implementation of a TrayIcon
b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files)
c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file)
d. My own implementation of TableModel
e. json …Run Code Online (Sandbox Code Playgroud)我想以有意义的方式使用Swing将MVC设计应用于我的Java应用程序.因此我的问题是,如何在Java Swing中构建控制器?
我有两个选择:
这两种可能吗?这是一个偏好问题,还是明确界定?
我们正在制作一个相当大的Swing应用程序,它必须实现MVC模式.该应用程序目前看起来像这样:
有很多观点.它们以分层方式创建,其中一个主视图包含(并创建)多个视图,这些视图都包含它们自己的子视图集等.每个视图通过调用模型从模型独立地从其他视图中检索信息必要时的静态方法.
还有不少控制器都完全相互分离.每个控制器都属于一个视图.每个视图都创建自己的控制器,并将控制器添加为用户输入的侦听器.控制器从视图接收事件,然后通过模型静态方法修改模型.当视图调度不影响模型但仅影响视图的事件时,视图会自行处理这些事件 - 而不通知控制器事件.也就是说,控制器完全不知道视图,控制器的目的只是处理模型的操作.| 编辑:控制器目前是他们观点的附件; 它们只包含事件处理的逻辑.也就是说,控制器本身不是组件,并且不包含组件.它们的实现方式与以下示例相同:MVC示例 |
应用程序中的模型非常被动,甚至没有侦听器(它代表数据库).它从控制器接收更新.
在此示例中,视图拥有控制器.如果控制器拥有并创建视图,并且如果让视图不知道控制器而不是相反的情况,那么在一般情况下会更好吗?在那种情况下,为什么?这将如何设计?如果没有,是否有更好的设计,控制器仍然没有意识到这些观点?或者,也许是他们中最好的设计?
编辑:
"视图负责建立这种相互通信......"似乎表明视图创建了控制器,或者至少具有对控制器的初始引用,反之亦然.
所以这至少是一种可行的方法(它是一种有效的MVC模式),但主要问题仍然存在; 哪个更好,最好的设计会是怎样的?特别是在处理与其各自视图密切相关的许多控制器时?
现在坐在这里几个小时试图解决这个问题,所以对这个大问题有点同情.:)
目标:我只想将完成的代码分成MVC(模型视图控制器)部分.我已完成游戏逻辑并基于文本 - 代码工作正常.
问题:嗯,我想将这个代码实现到MVC中,但是在哪里解释它应该使用基于文本的MODEL?因为VIEW仅用于布局(图形化)正确吗?我真的很难搞清楚从哪里开始.任何指针都会很棒!
这是我的游戏逻辑代码:
import mind.*;
import javax.swing.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
public class Drive {
String[] mellan;
boolean gameEnd, checkempty, checkempty2, enemy, enemy2;
String gr,rd,tom;
int digits;
public Drive() {
// Gamepieces in textform
gr="G"; rd="R"; tom=" ";
mellan = new String[7];
String[] begin = {gr,gr,gr,tom,rd,rd,rd};
String[] end = {rd,rd,rd,tom,gr,gr,gr};
//input
Scanner in = new Scanner(System.in);
mellan=begin;
gameEnd=false;
while (gameEnd == false) {
for(int i=0; i<mellan.length; i++) {
System.out.print(mellan[i]);
}
System.out.print(" Choose 0-6: …Run Code Online (Sandbox Code Playgroud) 如何将输出连接到paneWithList?
PaneWithList它上面有一个监听器,JList以便将选定的行输出到控制台.如何将输出定向到JTextPane输出?
可以PaneWithList解雇一个Main接收的事件吗?会的PropertyChangeSupport足够?
Main.java:
package dur.bounceme.net;
import javax.swing.JTabbedPane;
public class Main {
private static JTabbedPane tabs;
private static PaneWithList paneWithList;
private static PaneWithTable paneWithTable;
private static Output output;
public static void main(String[] args) {
tabs = new javax.swing.JTabbedPane();
paneWithList = new PaneWithList();
paneWithTable = new PaneWithTable();
tabs.addTab("list", paneWithList);
tabs.addTab("table", paneWithTable);
tabs.addTab("output", output);
}
}
Run Code Online (Sandbox Code Playgroud) 这个问题与MVC(模型 - 视图 - 控制器)有关.我的模型当前使用Java中的Observer/Observable模式更改了我的View:
public class Model extends Observable {
}
public class View implements Observer {
@Override
public void update(observable o, Object obj) {
// ... update the view using the model.
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,我的模型变得越来越复杂 - 它开始保持其他类的列表:
public class Model extends Observable {
List<Person> people = new ArrayList<Person>();
}
public class Person {
private String name = "";
// ... getter / setter for name
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:当一个人的名字发生变化时,我想更新一个包含该人的模型的视图.我能想到的唯一方法是让Model实现一个Observer类,让Person扩展一个Observable类.然后,当Person改变时,他会通知他的观察者(包括父模型).
然而,如果我的模型变得复杂,这似乎很多工作.是否有更好的方法可以对父模型进行"冒泡"更改?
我想知道是否Spring MVC可以用于在Java Swing应用程序中实现MVC模式.我做了一些研究,发现Spring MVC用于Web开发.
有没有什么方法可以将Spring MVC用于Swing应用程序?
直接解决我的问题.
你如何做大规模的GUI项目.到目前为止,我还没有在java中做过任何更大的GUI项目,但我现在正在进行的工作变得非常快,而且相当大,现在我被困在一大堆非常烦人和混乱的代码中.
由于我来自Web开发领域,我习惯于MVC框架所以我在我的项目模型中有3个包我保留了与whit文件或db交互的类,其中我保留了我的类用于Forms或GUI和Controller包的地方我的大多数逻辑.
我被告知要将我的逻辑分开,同时在一个班级和另一个班级的听众中保持行动,但我不知道如何将所有这些联系起来.
到目前为止,我只有一个Controller类,我执行所有关于GUI调用后发生的所有方法.
package pft.controller;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.JTree;
import java.awt.event.*;
import javax.swing.JProgressBar;
import pft.view.Invoke_GUI;
import pft.model.Events;
import pft.model.Parse;
public class Tower_Controller {
public Tower_Controller() {
}
//Global variables
String isSelected = null;
int hasModules = 0;
int cap = 0;
int cpu = 0;
int shield = 0;
int armor = 0;
public void setName(String name){
this.isSelected = name;
}
public String getName(){
return this.isSelected;
}
public void setCap(int …Run Code Online (Sandbox Code Playgroud) java ×10
swing ×8
architecture ×1
decoupling ×1
jframe ×1
netbeans ×1
oop ×1
spring ×1
spring-mvc ×1