Java MVC项目 – 我无法更新绘图,或者我看不到它
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java MVC项目 – 我无法更新绘图,或者我看不到它,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6463字,纯文字阅读大概需要10分钟。
内容图文
![Java MVC项目 – 我无法更新绘图,或者我看不到它](/upload/InfoBanner/zyjiaocheng/785/b77e14fe634e48c7b885660841b90169.jpg)
我有一个基于模型 – 视图 – 控制器范例的项目,我在使其正常工作方面遇到了很多麻烦.
该程序有4个面板,可以让我以各种方式修改屏幕上绘制的椭圆.这些似乎工作得很好,经过相当的麻烦,我能够让它们显示在JFrame中,它保存整个shebang.我已经设法通过脱离提供的指令来显示它们,但是当我这样做时,我似乎无法更新椭圆形.但是,如果我遵循信件的指示,我只会看到一个空框架.
该项目有非常具体的方向,我跟进了一点,但一些文件不清楚.我认为我所缺少的必须是简单的东西,因为没有什么东西可以跳出来,因为没有意义.我不得不承认,虽然我的Java经验有限,但我在GUI设计/范例方面的经验更是如此.
无论如何,我一直在网上和这个网站上广泛地试图弄清楚什么是错的,但这是一个有点具体的例子,老实说,我只是对此没有足够的了解来概括我在网上找到的任何答案.找出遗漏的东西.我一直在研究这段代码已经太久了所以我真的希望有人可以帮助我.
public class Model {
private Controller controller;
private View view;
private MvcFrame mvcFrame;
private int radius = 44;
private Color color = Color.BLUE;
private boolean solid = true;
//bunch of mutators and accessors for the above variables
public Model() {
controller = new Controller(this);
view = new View(this);
mvcFrame = new MvcFrame(this);
}
}
这是模型类.这似乎相当简单.我认为我对这里发生的事情的理解是可靠的,似乎没有任何错误.主要包括上下文.
public class Controller extends JPanel{
private Model model;
public Controller(Model model) {
this.model = model;
setBorder(BorderFactory.createLineBorder(Color.GREEN));
setLayout(new GridLayout(4,1));
add(new RadiusPanel(model));
add(new ColorPanel(model));
add(new SolidPanel(model));
add(new TitlePanel(model));
}
}
这是Controller类.据我所知,setBorder,setLayout和一系列添加在这里什么都不做.我让他们注释掉了,但是这是指令告诉我做事的方式,所以要么有错误,要么我的设置错了.但是,当我这样做时,我会得到一个空窗口(JFrame),但没有任何面板会显示在其中.我为解决这个问题所做的是将这些添加函数放在mvcFrame类中:
public class MvcFrame extends JFrame {
private Model model;
public MvcFrame(Model model){
this.model = model;
//setLayout(new GridLayout(4,1));
//add(new RadiusPanel(model));
//add(new ColorPanel(model));
//add(new SolidPanel(model));
//add(new TitlePanel(model));
//add(new View(model));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(800,600);
setVisible(true);
}
}
所以这里的事情开始变得怪异了.注释掉的第一个代码块与Controller类中的代码相同.我之所以注意到它的原因是因为这只是一个幸运的猜测 – 根据说明,它不应该是那样的.然而,这确实有助于让面板出现 – 但在那时我还在试图让椭圆形展开.
另一个注释行(添加(新视图(模型));)是使事情有效的不同尝试.在这种情况下,我将这些添加函数放在View类中(参见下面注释掉的代码).这实际上可以显示椭圆形和面板,但该方法不允许我更新椭圆形.此外,虽然我刚刚进行了椭圆形显示,但我似乎无法弄清楚到底发生了什么,我似乎无法让它回来.
public class View extends JPanel{
private Model model;
public View(Model model) {
this.model = model;
//setLayout(new GridLayout(4,1));
//add(new RadiusPanel(model));
//add(new ColorPanel(model));
//add(new SolidPanel(model));
//add(new TitlePanel(model));
repaint();
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
//center of view panel, in pixels:
int xCenter = getWidth()/2;
int yCenter = getHeight()/2;
int radius = model.getRadius();
int xStart = xCenter - radius;
int yStart = yCenter - radius;
int xWidth = 2 * radius;
int yHeight = 2 * radius;
g.setColor(model.getColor());
g.clearRect(0, 0, getWidth(), getHeight());
if (model.isSolid()){
g.fillOval(xStart, yStart, xWidth, yHeight);
} else {
g.drawOval(xStart, yStart, xWidth, yHeight);
}
}
}
有点像以前一样的想法 – 注释掉的代码是我添加的东西,试图让事情有效,但不是基于提供的指示.在那些东西被取消注释的情况下,我有了add(new View(model));来自mvcFrame行的行也没有注释.
各种面板类(SolidPanel,ColorPanel等)只是扩展了一个名为ControlPanel的类,它扩展了JPanel.这些似乎都按预期工作,没有太多问题.还有一个启动GUI的驱动程序.这似乎也按预期工作.
我遇到的主要问题是我无法显示椭圆形,而且有一次我可以让它显示出来,没有任何改变它的选项似乎有效.我觉得我很接近,但我现在只是为了尝试其他事情而感到茫然.
任何可以提供帮助的人都会对我表示最诚挚的谢意.
解决方法:
这是一个非常草率的重写事情,“只是为了让它工作”.
main.java
public class main {
public static void main(String[] args) {
// The JFrame could be created here, since it lasts the life
// of the program.
//...then, later, the model.
Model mdl = new Model();
// ...and then move on to applying the view and control to the frame.
}
}
Controller.java
// Nothing interesting here, added for consistency.
public class Controller {
private final Model model;
public Controller(Model model) {
// The frame is shown automatically in the model here.
this.model = model;
// The frame's setVisible is a control issue, should be called
// from in here, not automatically in the model.
}
}
MvcFrame.java
import javax.swing.JFrame;
public class MvcFrame extends JFrame {
private final Model model;
public MvcFrame(Model model){
this.model = model;
// Anytime you add anything to a JFrame, use the content pane.
this.getContentPane().add(model.getView());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// This line centers the frame on your screen.
setLocationRelativeTo(null);
setSize(800,600);
// The frame won't paint until it's visible.
// This means if you check dimensions, everything will be 0 x 0
// until this line is called.
setVisible(true);
}
}
Model.java
import java.awt.Color;
public class Model {
private final Controller controller; // Not used yet
private final View view;
private final MvcFrame mvcFrame; // Not used yet
// Mutators and accessors needed for these guys (set/get)
private final int radius = 44;
private final Color color = Color.BLUE;
private final boolean solid = true;
public Model() {
controller = new Controller(this);
view = new View(this);
mvcFrame = new MvcFrame(this);
}
public View getView() {
return view;
}
public int getRadius() {
return radius;
}
public Color getColor() {
return color;
}
public boolean isSolid() {
return solid;
}
}
View.java
import java.awt.Graphics;
import javax.swing.JPanel;
public class View extends JPanel{
private final Model model;
public View(Model model) {
this.model = model;
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
//center of view panel, in pixels:
int xCenter = getWidth()/2;
int yCenter = getHeight()/2;
int radius = model.getRadius();
int xStart = xCenter - radius;
int yStart = yCenter - radius;
int xWidth = 2 * radius;
int yHeight = 2 * radius;
g.setColor(model.getColor());
g.clearRect(0, 0, getWidth(), getHeight());
if (model.isSolid()){
g.fillOval(xStart, yStart, xWidth, yHeight);
} else {
g.drawOval(xStart, yStart, xWidth, yHeight);
}
}
}
内容总结
以上是互联网集市为您收集整理的Java MVC项目 – 我无法更新绘图,或者我看不到它全部内容,希望文章能够帮你解决Java MVC项目 – 我无法更新绘图,或者我看不到它所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。