Olá Pessoal, estou com o seguinte problema, tenho um JLabel que que é renderizado com uma imagem (seIcon()), e então devo desenhar umas retas sobre ele … mas não da, será q estou fazendo algo errado?
Icon mapImg = new ImageIcon(imgFolder.concat("map.gif"));
jLabelImg.setIcon(mapImg);
...
Graphics g = jLabelImg.getGraphics();
g.drawLine(coorX, coorY, x,y);
jLabelImg.printAll(g);
já tentei com print e paint, na verdade a reta pisca no label, como se no repaint a imgem estivesse por cima … é isso?
public class TracaReta extends JFrame implements MouseListener {
JLabellblTeste;IconimgPonto=newImageIcon(getClass().getResource("ponto.gif"));JLabellblPonto[]=newJLabel[2];intx[]=newint[2];inty[]=newint[2];intcont;publicTracaReta(){super("Traçando reta no java");montaTela();}publicvoidmontaTela(){montaLblTeste();montaJanela();}publicvoidmontaLblTeste(){lblTeste=newJLabel();lblTeste.setBackground(Color.white);lblTeste.setOpaque(true);lblTeste.setBounds(300,20,200,200);lblTeste.addMouseListener(this);add(lblTeste);}publicvoidmontaJanela(){getContentPane().setBackground(Color.cyan);setLayout(null);setSize(800,800);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setVisible(true);}publicvoidmouseClicked(MouseEvente){x[cont]=lblTeste.getMousePosition().x;y[cont]=lblTeste.getMousePosition().y;lblPonto[cont]=newJLabel(imgPonto);lblTeste.add(lblPonto[cont]);lblPonto[cont].setBounds(x[cont],y[cont],5,5);cont++;if(cont==2){Graphicsg=lblTeste.getGraphics();g.setColor(Color.red);g.drawLine(x[0],y[0],x[1],y[1]);lblTeste.removeMouseListener(this);cont=0;mouseFora();}}publicvoidmouseEntered(MouseEvente){mouseDentro();}publicvoidmouseExited(MouseEvente){mouseFora();}publicvoidmousePressed(MouseEvente){}publicvoidmouseReleased(MouseEvente){}publicvoidmouseDentro(){setCursor(newCursor(Cursor.CROSSHAIR_CURSOR));}publicvoidmouseFora(){setCursor(newCursor(Cursor.DEFAULT_CURSOR));}publicstaticvoidmain(String[]args){newTracaReta();}
}
R
roger_rf
Para desenhar retas sobre um JLabel, uma saída é criar uma classe derivada de JLabel e redefinir o método paintComponent():