java – 我的Paint方法运行了两次,我不明白为什么.我怎么能解决这个问题,有谁知道为什么会这样?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 我的Paint方法运行了两次,我不明白为什么.我怎么能解决这个问题,有谁知道为什么会这样?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7219字,纯文字阅读大概需要11分钟。
内容图文
![java – 我的Paint方法运行了两次,我不明白为什么.我怎么能解决这个问题,有谁知道为什么会这样?](/upload/InfoBanner/zyjiaocheng/726/98de1151c7094d1b9f11de50ec6562a8.jpg)
正在使用的Expo类只是一个快捷方式,如果有人想运行我的代码我可以链接它.问题是用户只能点击一个方格才能进行,并随机地改变你前进的方格.所以在第一页上它是[失败] [失败] [通过],下一页,它也应该是[失败] [失败] [通过],是[通过] [通过] [通过].
编辑:世博会实际上太长了,在这里发布,这里是一个链接,以查看它Link
import java.awt.*;
import java.applet.Applet;
public class BarryViper extends java.applet.Applet
{
Rectangle top, mid, bot;
int numColor;
int pageNum;
public void init()
{
top = new Rectangle(100,75,150,150);
mid = new Rectangle(100,275,150,150);
bot = new Rectangle(100,475,150,150);
numColor = 0;
pageNum = 0;
}
public void paint(Graphics g)
{
switch (pageNum)
{
case 0 : page1(g); break;
case 1 : page2(g); break;
case 2 : page3(g); break;
case 3 : page4(g); break;
// case 4 : page5(g); break;
// case 5 : page6(g); break;
// case 6 : page7(g); break;
// case 7 : page8(g); break;
// case 8 : page9(g); break;
// case 9 : page10(g); break;
}
}
public boolean mouseDown(Event e, int x, int y)
{
if(top.inside(x,y))
numColor = 1;
else if(mid.inside(x,y))
numColor = 2;
else if(bot.inside(x,y))
numColor = 3;
else
numColor = 0;
repaint();
return true;
}
public void page1(Graphics g)
{
Expo.setBackground(g,0);
Expo.setColor(g,Expo.white);
Expo.fillRectangle(g,100,75,250,225);
Expo.fillRectangle(g,100,275,250,425);
Expo.fillRectangle(g,100,475,250,625);
Expo.setFont(g,"Arial",Font.BOLD,20);
Expo.drawString(g,"-You Have been Tasked with slaying the dragon that has forsaken these lands.",260,75);
Expo.drawString(g,"-This quest will be long, difficult, and full of Monty Python refrences.",260,95);
Expo.drawString(g,"-Do you accept this task?",260,115);
Expo.setColor(g,Expo.red);
Expo.setFont(g,"Arial",Font.BOLD,15);
Expo.drawString(g,"Nah",155,155);
Expo.drawString(g,"I Prefer",145,350);
Expo.drawString(g,"Monty Java",130,370);
Expo.drawString(g,"Sure I could",130,540);
Expo.drawString(g,"waste some time",115,560);
switch (numColor)
{
case 0 : pageNum=0; break;
case 1 : pageNum=0; break;
case 2 : pageNum=0; break;
case 3 : pageNum=1; break;
}
}
public void page2(Graphics g)
{
Expo.setBackground(g,0);
Expo.setColor(g,Expo.white);
Expo.fillRectangle(g,100,75,250,225);
Expo.fillRectangle(g,100,275,250,425);
Expo.fillRectangle(g,100,475,250,625);
Expo.setFont(g,"Arial",Font.BOLD,20);
Expo.drawString(g,"-Good Choice! You now decide to roam down an old dirt road, when suddenly",260,75);
Expo.drawString(g,"-You encounter a group of three Goblins blocking your path",260,95);
Expo.drawString(g,"-What is your reaction?",260,115);
Expo.setColor(g,Expo.red);
Expo.setFont(g,"Arial",Font.BOLD,15);
Expo.drawString(g,"Hide from them ",115,155);
Expo.drawString(g,"Try talking",130,350);
Expo.drawString(g,"To them",130,370);
Expo.drawString(g,"Attack them",130,540);
Expo.drawString(g,"immediately",130,560);
switch (numColor)
{
case 0 : pageNum=0; break;
case 1 : pageNum=0; break;
case 2 : pageNum=0; break;
case 3 : pageNum=2; break;
}
}
public void page3(Graphics g)
{
Expo.setBackground(g,0);
Expo.setColor(g,Expo.white);
Expo.fillRectangle(g,100,75,250,225);
Expo.fillRectangle(g,100,275,250,425);
Expo.fillRectangle(g,100,475,250,625);
Expo.setFont(g,"Arial",Font.BOLD,75);
Expo.drawString(g,"PAGE 3",200,75);
switch (numColor)
{
case 0 : pageNum=0; break;
case 1 : pageNum=0; break;
case 2 : pageNum=0; break;
case 3 : pageNum=3; break;
}
}
public void page4(Graphics g)
{
Expo.setBackground(g,0);
Expo.setColor(g,Expo.white);
Expo.fillRectangle(g,100,75,250,225);
Expo.fillRectangle(g,100,275,250,425);
Expo.fillRectangle(g,100,475,250,625);
Expo.setFont(g,"Arial",Font.BOLD,75);
Expo.drawString(g,"PAGE 4",200,75);
switch (numColor)
{
case 0 : pageNum=0; break;
case 1 : pageNum=0; break;
case 2 : pageNum=0; break;
case 3 : pageNum=4; break;
}
}
}
解决方法:
实际上,只要系统需要重新绘制窗口,就会调用paint().您可以调整窗口大小,移动或隐藏窗口.每次调用paint().将另一个窗口拖到你的窗口上,你会看到paint()的调用次数.
所以,不要使用paint fr任何逻辑.使用MVC模式并将绘画与逻辑分开.
特别是 – 保持模型中的颜色并根据鼠标点击进行更改.然后paint()应该使用基于颜色的当前值,但不能确定它是什么颜色.
如果你想看代码 – 这里是:
import java.awt.*;
import java.applet.Applet;
public class BarryViper extends java.applet.Applet {
Rectangle top, mid, bot;
int numColor;
int pageNum;
public void init() {
top = new Rectangle(100, 75, 150, 150);
mid = new Rectangle(100, 275, 150, 150);
bot = new Rectangle(100, 475, 150, 150);
numColor = 0;
pageNum = 0;
}
public void paint(Graphics g) {
switch (pageNum) {
case 0:
page1(g);
break;
case 1:
page2(g);
break;
case 2:
page3(g);
break;
case 3:
page4(g);
break;
}
}
public boolean mouseDown(Event e, int x, int y) {
if (top.inside(x, y))
numColor = 1;
else if (mid.inside(x, y))
numColor = 2;
else if (bot.inside(x, y))
numColor = 3;
else
numColor = 0;
switch (numColor) {
case 0:
pageNum = 0;
break;
case 1:
pageNum = 0;
break;
case 2:
pageNum = 0;
break;
case 3:
pageNum = pageNum;
break;
}
repaint();
return true;
}
public void page1(Graphics g) {
Expo.setBackground(g, 0);
Expo.setColor(g, Expo.white);
Expo.fillRectangle(g, 100, 75, 250, 225);
Expo.fillRectangle(g, 100, 275, 250, 425);
Expo.fillRectangle(g, 100, 475, 250, 625);
Expo.setFont(g, "Arial", Font.BOLD, 20);
Expo.drawString(
g,
"-You Have been Tasked with slaying the dragon that has forsaken these lands.",
260, 75);
Expo.drawString(
g,
"-This quest will be long, difficult, and full of Monty Python refrences.",
260, 95);
Expo.drawString(g, "-Do you accept this task?", 260, 115);
Expo.setColor(g, Expo.red);
Expo.setFont(g, "Arial", Font.BOLD, 15);
Expo.drawString(g, "Nah", 155, 155);
Expo.drawString(g, "I Prefer", 145, 350);
Expo.drawString(g, "Monty Java", 130, 370);
Expo.drawString(g, "Sure I could", 130, 540);
Expo.drawString(g, "waste some time", 115, 560);
}
public void page2(Graphics g) {
Expo.setBackground(g, 0);
Expo.setColor(g, Expo.white);
Expo.fillRectangle(g, 100, 75, 250, 225);
Expo.fillRectangle(g, 100, 275, 250, 425);
Expo.fillRectangle(g, 100, 475, 250, 625);
Expo.setFont(g, "Arial", Font.BOLD, 20);
Expo.drawString(
g,
"-Good Choice! You now decide to roam down an old dirt road, when suddenly",
260, 75);
Expo.drawString(g,
"-You encounter a group of three Goblins blocking your path",
260, 95);
Expo.drawString(g, "-What is your reaction?", 260, 115);
Expo.setColor(g, Expo.red);
Expo.setFont(g, "Arial", Font.BOLD, 15);
Expo.drawString(g, "Hide from them ", 115, 155);
Expo.drawString(g, "Try talking", 130, 350);
Expo.drawString(g, "To them", 130, 370);
Expo.drawString(g, "Attack them", 130, 540);
Expo.drawString(g, "immediately", 130, 560);
}
public void page3(Graphics g) {
Expo.setBackground(g, 0);
Expo.setColor(g, Expo.white);
Expo.fillRectangle(g, 100, 75, 250, 225);
Expo.fillRectangle(g, 100, 275, 250, 425);
Expo.fillRectangle(g, 100, 475, 250, 625);
Expo.setFont(g, "Arial", Font.BOLD, 75);
Expo.drawString(g, "PAGE 3", 200, 75);
}
public void page4(Graphics g) {
Expo.setBackground(g, 0);
Expo.setColor(g, Expo.white);
Expo.fillRectangle(g, 100, 75, 250, 225);
Expo.fillRectangle(g, 100, 275, 250, 425);
Expo.fillRectangle(g, 100, 475, 250, 625);
Expo.setFont(g, "Arial", Font.BOLD, 75);
Expo.drawString(g, "PAGE 4", 200, 75);
}
}
这是一个想法 – 将逻辑移动到控制器 – 在您的情况下使用mouselistener.
这只是pagenumber的示例.对于文本也应该这样做.所有文本都应该在模型中,一般来说,您应该只有一种绘制方法,可以从模型中绘制文本.所以,这些pageN()方法也应该消失了.
内容总结
以上是互联网集市为您收集整理的java – 我的Paint方法运行了两次,我不明白为什么.我怎么能解决这个问题,有谁知道为什么会这样?全部内容,希望文章能够帮你解决java – 我的Paint方法运行了两次,我不明白为什么.我怎么能解决这个问题,有谁知道为什么会这样?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。