Tratar posicionamento de formas geométricas em panel

Tenho um panel size=500x500 que é usado como base para desenhar algumas figuras geométricas.
Acontece que o tamanho e localização das figuras é determinado pelo usuário. Às vezes, dependendo do valor que o usuário entra, as figuras são desenhadas fora da area visível do panel(as figuram não aparecem). E também, o usuário pode aplicar varias transformaçoes(shear, rotate, translate…) e muitas vezes faz com que as figuras saiam da área visível.

Como poderia tratar esses erros?

[code]public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
this.setBackground(new java.awt.Color(255, 255, 255));
//desenha linhas do painel

   g2d.setColor(randomColor());
   g2d.transform(t);
   //desenha elipse
   if (TransformTestFrame.circun.isSelected()) {
       elipse = new Ellipse2D.Double(posicaox,posicaoy, comprimento, largura);
       g2d.setPaint(new GradientPaint(0, 0, randomColor(), 175, 175, randomColor(),true));
       g2d.fill(elipse);
       g2d.draw(elipse);
       g2d.setColor(Color.black);
       int x=(int) elipse.getCenterX();
       int y=(int) elipse.getCenterY();
    }
   //desenha triangulo
    else if (TransformTestFrame.triang.isSelected()) {
        polyg = new Polygon();
        polyg.addPoint(px[0], py[0]);
        polyg.addPoint(px[1], py[1]);
        polyg.addPoint(px[2], py[2]);
        g2d.setPaint(new GradientPaint(0, 0, randomColor(), 175, 175, randomColor(),true));
        g2d.draw(polyg);
        g2d.fill(polyg);
    }
   //desenha retangulo
    else if (TransformTestFrame.retangulo.isSelected()) {
        rectang = new Rectangle2D.Double();
        rectang.setRect(this.posicaox, this.posicaoy,TransformPanel.comprimento,TransformPanel.largura);
        g2d.setPaint(new GradientPaint(0, 0, randomColor(), 175, 175, randomColor(),true));
        g2d.draw(rectang);
        g2d.fill(rectang);
    }
}
public void setRotate()
{
   t.setToRotation(Math.toRadians(angulo));
   repaint();
}
public void setRotateTranlate()
{
   t.setToRotation(Math.toRadians(angulo), translatex, translatey);
   repaint();
}
public void setTranslateInt()
{
   t.setToTranslation(posx, posy);
   repaint();
}
public void setTranslateDouble()
{
   t.setToTranslation(translatex, translatey);
   repaint();
}
public void setScale()
{
   t.setToScale(fatorx, fatory);
   repaint();
   System.out.println("setscale");
}

public void setShear()
{
t.setToShear(fatorx,fatory);
repaint();
System.out.println(“setshear”);
}
public void setFlipX()
{
repaint();
}
public void setFlipY()
{
repaint();
}[/code]

Imagine que seu Painel é um plano cartesiano onde o canto superior esquerdo é o ponto de coordenadas (zero, zero), o canto superior direito é o ponto (500,0), o canto inferior esquerdo (0,500) e por fim, o canto inferior direito (500,500)…logo você tem um quadrado de lado 500. Ao receber os valores do uusuário, vc pode testar a seguinte condição:

if(valorEntradaX>=0 &&valorEntradaX<=500&&valorEntradaY>=0&&valorEntradaY<=500){
   //permite desenhar
}else{
   JOptionPane.showMessageDialog(this, "O desenho ficará fora da área visual ");
}

obrigado pela ajuda.
Entendi o raciocínio, adaptei o codigo e mandei rodar mas a telinha do JOptionPane fica travada(parece que ta dentro de um loop).
Coloquei de forma que avise o usuario que a imagem foi desenhado fora do quadro.

[code] public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
this.setBackground(new java.awt.Color(255, 255, 255));
//desenha linhas do painel
g2d.setColor(Color.BLUE);
g2d.drawLine(0, 250, 500, 250);
g2d.drawLine(250, 0, 250, 500);
g2d.drawRect(0, 0, this.LARG_DES-1 , this.ALT_DES-1);

   g2d.transform(t);
   //desenha elipse
   if (FramePrincipal.circun.isSelected()) {
       //if(posicaox&gt;=0 &&posicaox&lt;=500&&posicaoy&gt;=0&&posicaoy&lt;=500){

       if(posicaox&lt;=0 || posicaox&gt;=500 || posicaoy&lt;=0 || posicaoy&gt;=500)
       {
           JOptionPane.showMessageDialog(this, &quot;O desenho ficou fora da área visual &quot;);
       }
       elipse = new Ellipse2D.Double(posicaox,posicaoy, comprimento, largura);
       g2d.setPaint(new GradientPaint(0, 0, randomColor(), 175, 175, randomColor(),true));
       g2d.fill(elipse);
       g2d.draw(elipse);
       g2d.setColor(Color.black);
       int x=(int) elipse.getCenterX();
       int y=(int) elipse.getCenterY(); 
       
    }

}[/code]

Você não pode dar um alerta dentro de um método paint ou paintComponent. Como você deve saber, esse método serve só para uma coisa, que é pintar o desenho.
Se o desenho ficou fora, você tem de ver isso ANTES de efetivar as alterações.