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???