Графическое содержимое стирается при максимизации - PullRequest
2 голосов
/ 20 сентября 2011

Я разрабатываю приложение для рисования с графическим интерфейсом.Но проблема в том, что содержимое кадра стирается при минимизации, а затем максимизации.Я знаю, в чем проблема, это то, что краска вызывается снова после максимизации, а содержимое кадра обрабатывается неправильно.Но я не смог решить поведение, даже узнав об ошибке.

Вот основной код, ответственный за это поведение:

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)
    {
    }
}

1 Ответ

1 голос
/ 20 сентября 2011

Мой голос - это комментарий mkrhrts о том, что вы переопределяете paint, когда должны переопределить paintComponent.

Переопределение paint - это плохая практика, и вы, похоже, не делаете ничего из перечисленного, чтобы убедиться, что оно не сломалось:

  • call super.paint()
  • вызов paintComponent, paintBorder или paintChildren

Ознакомьтесь с документацией для метода рисования .

...