Desenhar em um BufferedImage em tempo de execução

Eu gostaria de saber se existe alguma forma de desenhar em um BufferedImage em tempo de execução. É assim: eu tenho um JCheckBox e eu preciso que quando ele estiver ativado, seja desenhada algumas linhas em uma figura e quando esse JCheckBox for desmarcado, essas linhas desapareçam… alguém sabe como?
Obrigada

Bem… no seu caso creio que a melhor forma seria um swap de imagens… qdo o check estiver marcado vc pinta uma imagem com as linhas desenhadas e quando ele estiver desmarcado vc pinta outra imagem sem estas linhas…

não sei se isto é será para vc… o que realmente precisa fazer?

talvez funcione… o que eu preciso é q quando a opção estiver marcadas algumas coordenadas apareçam em um mapa e quando a opção estiver desmarcada essas coordenadas sumam… não tem um jeito de apagar um desenho Graphics2D?

Para desenhar no BufferedImage.

BufferedImage img = new BufferedImage(800,600,BuffereImage.TYPE_RGB);
Graphics2D g2d = img.createGraphics();
//Pintar em g2d aqui.
g2d.dispose();

Faça uma cópia e desenhe na cópia.

if (checkBoxMarcado) { //Usa a imagem original } else { BufferedImage copia = new BufferedImage(imagemOriginal.getWidth(), imagemOriginal.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = copia.createGraphics(); g2d.drawImage(imagemOriginal, 0,0, null); //Desenhe as linhas aqui g2d.dispose(); //Use a cópia }

Eu tô fazendo da seguinte forma:


public class BottomFrame extends JInternalFrame{
     private JScrollPane scrollImage;
     private JCheckBox coordinates;
     private MetodosFrame metodos = new MetodosFrame();

  public BottomFrame(){
        scrollImage = new JScrollPane(metodos.getJLabe             (),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollImage.setLocation(182,10);
        scrollImage.setSize(402,270);
        scrollImage.setVisible(true);
        add(scrollImage);
}         

  public void shouldDrawCooordinates(){
    coordinates = new JCheckBox("Coordenada", true);
    coordinates.setVisible(true);
    coordinates.setLocation(85, 265);
    coordinates.setSize(90, 15);
    add(coordinates);
    coordinates.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
	if (coordinates.isSelected()) {
                          metodos.drawM
                          metodos.drawCoordinates();
	}//end if isSelected
                  else {
	        metodos.drawMap();

	}//end else
	scrollImage.validade
              }
      });
  }

public class MetodosFrame  {
   private JLabel imagem;

   public void drawCoordinates(){
        Graphics2D gr = bf.createGraphics();
        gr.setColor(Color.MAGENTA);
        gr.setStroke(new BasicStroke(4.0f));
        int []xtValues= toIntFitDfs(topdefx);
        int []ytValues= toIntFitDfs(topdefy);
        int []xbValues= toIntFitDfs(botdefx);
        int []ybValues= toIntFitDfs(botdefy);
        Polygon polygon1 = new Polygon(xtValues, ytValues,dfs);
        Polygon polygon2 = new Polygon(xbValues, ybValues,dfs);
        gr.drawPolygon(polygon1);
        gr.drawPolygon(polygon2);
        for(int i=0;i<dfs;i++){
            gr.drawLine(xtValues[i],ytValues[i],xbValues[i], ybValues[i]);
        }
        gr.dispose();
    }

    public void drawMap(){
        Graphics2D gr = bf.createGraphics();
        gr.setColor( Color.lightGray);
        gr.fillRect(0,0,mapWidth+600,mapHeight+600);
        wr = bf.getRaster();
        wr.setDataElements(300,300,mapWidth,mapHeight,vMap);
        imagem = new JLabel();
        imagem.setIcon(new ImageIcon(bf));
        gr.dispose();
    }

    public JLabel getJLabel(){
        return imagem;
    }
   

Mas não tah dando certo…
Alguém pode me ajudar?

eu consegui fazer do seguinte jeito:
criei tres JLabels: um para a imagem sem as linhas, outro para a imagem com as linhas e um terceito auxiliar
ai criei o action

coordinates = new JCheckBox("Guias", false);

 public void actionPerformed(ActionEvent e) {
                       if (coordinates.isSelected()) {
                           aux = labelCoord;
                           scrollImage.setViewportView(aux); // onde scrollImage é um JScrollPane
                            centralizar();                          
                       }// end if isSelected
                       else {
                            aux = labelMapa;
                            scrollImage.setViewportView(aux); // onde scrollImage é um JScrollPane
                           centralizar();
                       }// end else
                   
                 }

Ate deu certo. O problema q eu estou tendo agora é que eu não tô conseguindo localizar a imagem onde eu quero. Eu quero q o scrollPane, mostre o meio da imagem.

eu criei o seguinte método:

public void centralizar(){
           int lMapa= metodos.getmapWidth();
           int m=(metodos.getTamBuf()-lMapa)/2;
           int l=scrollImage.getWidth();
           int h=scrollImage.getHeight();
           int x= (metodos.getmapWidth()/2)-(l/2)+m;
           int y= (metodos.getMapHeight()/2)-(h/2)+m;
          scrollImage.getViewport().scrollRectToVisible(new Rectangle(x,y,l,h));

      }

Mas ele não funciona quando chamado apos o scrollImage.setViewportView(aux). Alguém sabe como eu devo fazer pra conseguir centralizar a minha imagem???