Ola. Como meu código é bem grande vou tentar simplificá-lo. Eu tenho uma classe principal que passa uma imagem para uma classe extends JFrame (InterfaceEditarPontos). Nesta classe InterfaceEditarPontos eu mando exibir uma imagem em um JFrame e sempre que houver um click de mouse na imagem acontece uma chamada a classe Listener que captura as coordenas do mouse. Tudo isso está acontecendo sem problema. O problema é que preciso pegar essas coordenadas do mouse e manda-las de volta para a classe InterfaceEditarPontos. Como as coordenadas são calculadas na classe Listener para enviá-las para a classe InterfaceEditarPontos eu preciso criar um objeto, só que a InterfaceEditarPontos utiliza uma imagem como parametro de entrada no construtor, então não da pra criar um objeto com valor null e como a classe Listener não tem acesso a imagem, não posso criar um objeto com esta imagem. Tem alguma forma de acessar o método pintarPixel dentro da classe InterfaceEditarPontos diretamente? As classes estão simplificadas abaixo. Lembrando que não tem nenhum problema no código, cada um tá fazendo o que precisa fazer, só não sei como retornar esses valores da classe Listener (e.getX() e e.getY()).
essa é a interface:
[code]public class InterfaceEditarPontos extends JFrame{
public InterfaceEditarPontos(BufferedImage imagem){
criaComponentesJanela(); // cria os componentes da janela
setSize(imagem.getWidth(),imagem.getHeight());
this.imagem = imagem;
povoaJanela();
pack();
Listener l = new Listener();
this.addMouseListener(l);
setVisible(true);
}
public void pintarPixel (int x, int y) throws IOException
{
int altura = imagem.getWidth();
int largura = imagem.getHeight();
int[] pixel = imagem.getRGB(0, 0, largura, altura, null, 0, largura);
pixel[largura * x + y] = new Color(255, 0, 0).getRGB();
imagem.setRGB(0, 0, largura, altura, pixel, 0, largura);
ImageIO.write(imagem, "PNG", new File("c:\\pontos.png"));
}
}
[/code]
essa é alistener:
[code]public class Listener extends MouseAdapter implements ActionListener
{ @Override
public void mousePressed(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
//como passar x e y para o método pintarPixel?
}
@Override
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
znx, pra recuperar até que daria, só que como são vários clicks e a Listener eh disparada automaticamente, eu não sei onde poderia fazer a chamada das variáveis globais dentro da InterfaceEditarPontos para receber o valor sempre após o click, entendeu? Caso vc tenha uma ideia de quando fazer essa chamada sua solução pode dar certo. Se souber, diga ai que eu estou sem ideias. De qualquer modo, vlw pela resposta.
Pesquisando um pouco, vi que dá pra trazer uma AbstractAction para dentro da classe. O problema é que não consigo fazer a chamada do método automaticamente como fazia com a classe Listener. Alguma ideia?
[code]public InterfaceEditarPontos(BufferedImage imagem){
criaComponentesJanela(); // cria os componentes da janela
setSize(imagem.getWidth(),imagem.getHeight());
this.imagem = imagem;
povoaJanela();
pack();
//como fazer chamada da 'AbstractAction' aqui?
setVisible(true); // torna a janela visivel
}
Action mouseClick = new AbstractAction() {
public void actionPerformed(MouseEvent e) {
System.out.println("Click do mouse...");
int i = e.getX();
int j = e.getY();
try {
pintarPixel(i, j);
} catch (IOException ex) {
Logger.getLogger(InterfaceEditarPontos.class.getName()).log(Level.SEVERE, null, ex);
}
@Override
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
};
public void pintarPixel (int x, int y) throws IOException
{
int altura = imagem.getWidth();
int largura = imagem.getHeight();
int[] pixel = imagem.getRGB(0, 0, largura, altura, null, 0, largura);
pixel[largura * x + y] = new Color(255, 0, 0).getRGB();
imagem.setRGB(0, 0, largura, altura, pixel, 0, largura);
ImageIO.write(imagem, "PNG", new File("c:\\pontos.png"));
}