gpt4 book ai didi

java - 图形内容在最大化时被删除

转载 作者:行者123 更新时间:2023-11-30 11:51:23 25 4
gpt4 key购买 nike

我正在开发一个 GUI 绘画应用程序。但问题是框架内容在最小化然后最大化时被删除。我知道问题出在哪里,是最大化后再次调用 paint 并且框架的内容处理不当。但是即使知道错误也无法解决该行为。

这里是负责此行为的主要代码:

public void paint(Graphics g) {
/*From minimized to maximized*/
System.err.println("Inside paint now ");
try{
if(color==colour.red)
g.setColor(Color.red);
else if(color==colour.green)
g.setColor(Color.green);
else if(color==colour.pink)
g.setColor(Color.PINK);
else if(color==colour.cyan)
g.setColor(Color.CYAN);
else if(color==colour.magenta)
g.setColor(Color.MAGENTA);
else if(color==colour.orange)
g.setColor(Color.ORANGE);
else if(color==colour.white)
g.setColor(Color.white);
else if(color==colour.black)
g.setColor(Color.BLACK);
else if(color==colour.yellow)
{
g.setColor(Color.YELLOW);
System.out.println("Colour selected ");
}
else if(stat==state.line)
{
Point p=getMousePosition();

x=p.x;y=p.y;
System.out.append("In here ");
System.out.append("the point is "+x+" "+y);
if(prevx==0 && prevy==0)
{
g.drawLine(x, y, x, y);
// System.out.append("the point is "+x+" "+y);
}
else
g.drawLine(x, y, prevx, prevy);
prevx=x;
prevy=y;
System.out.println("Line selected ");
}
else if(stat==state.rectangle)
{
if(x<prevx)
{
x=x+prevx;
prevx=x-prevx;
x=x-prevx;
}
if(y<prevy)
{
y=y+prevy;
prevy=y-prevy;
y=y-prevy;
}
g.drawRect(prevx,prevy,x-prevx,y-prevy);
System.out.println("Rectangle selected ");
}
else if(stat==state.circle)
{
if(x<prevx)
{
x=x+prevx;
prevx=x-prevx;
x=x-prevx;
}
if(y<prevy)
{
y=y+prevy;
prevy=y-prevy;
y=y-prevy;
}
g.drawOval(prevx,prevy,x-prevx,y-prevy);
System.out.println("Circle selected ");
}
else if(stat==state.ruler)
{
g.drawLine(x, y, prevx, prevy);
System.out.println("Ruler selected ");
}
else if(stat==state.eraser)
{
g.setColor(getBackground());
g.fillRect(x-10, y-10, 20, 20);
System.out.println("Eraser selected ");
}
else
{
System.out.append("nothing done");
}
}
catch(Exception e)
{
}
}

最佳答案

我的投票是 mkrhrts 的评论,当您应该覆盖 paintComponent 时,您正在覆盖 paint

重写 paint 是不好的做法,您似乎没有执行以下任何操作来确保它不会中断:

  • 调用super.paint()
  • 调用paintComponentpaintBorderpaintChildren

查看 documentation for the paint method .

关于java - 图形内容在最大化时被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7485359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com