Inicializar valores MouseInputListener

Ola. Não estou conseguindo fazer com que os valores equivalentes ao mouse se atualizem. A classe segue abaixo. A principio achei que como os métodos por serem @Override iriam se atualizar automaticamente, mas isso nao aconteceu. Pensei que deveria atualizar os valores manualmente na classe run, mas não sei como fazer a chamada (e não axo que seja o metodo correto). A chamada à classe InputManager é feita assim:

System.out.println(InputManager.getInstance().getMousePos().x);

E o resultado é sempre 0.
Vale destacar que os valores equivalentes ao teclado estao todos corretos.
Segue a classe:

[code]import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.event.MouseInputListener;

public class InputManager implements KeyListener, MouseInputListener {
static protected int KEY_RELEASED = 0;
static protected int KEY_JUST_PRESSED = 1;
static protected int KEY_PRESSED = 2;
static private InputManager instance;
private HashMap<Integer, Integer> keyCache;
private ArrayList pressedKeys;
private ArrayList releasedKeys;
private boolean mouseButton1;
private boolean mouseButton2;
private Point mousePos;

private InputManager() {
    keyCache = new HashMap<Integer, Integer>();
    pressedKeys = new ArrayList<Integer>();
    releasedKeys = new ArrayList<Integer>();
    mousePos = new Point();
}

static public InputManager getInstance() {
    if (instance == null) {
        instance = new InputManager();
    }
    return instance;
}

public boolean isPressed(int keyId) {
    return keyCache.containsKey(keyId) && !keyCache.get(keyId).equals(KEY_RELEASED);
}

public boolean isJustPressed(int keyId) {
    return keyCache.containsKey(keyId) && keyCache.get(keyId).equals(KEY_JUST_PRESSED);
}

public boolean isReleased(int keyId) {
    return !keyCache.containsKey(keyId) || keyCache.get(keyId).equals(KEY_RELEASED);
}

public void update() {
    for (Integer keyCode : keyCache.keySet()) {
        if (isJustPressed(keyCode)) {
            keyCache.put(keyCode, KEY_PRESSED);
        }
    }
    for (Integer keyCode : releasedKeys) {
        keyCache.put(keyCode, KEY_RELEASED);
    }
    for (Integer keyCode : pressedKeys) {
        if (isReleased(keyCode)) {
            keyCache.put(keyCode, KEY_JUST_PRESSED);
        }
        else {
            keyCache.put(keyCode, KEY_PRESSED);
        }
    }
    pressedKeys.clear();
    releasedKeys.clear();
}

public void keyTyped(KeyEvent e) {
}

public void keyPressed(KeyEvent e) {
    pressedKeys.add(e.getKeyCode());
}

public void keyReleased(KeyEvent e) {
    releasedKeys.add(e.getKeyCode());
}

public boolean isMousePressed(int buttonId) {
    if (buttonId == MouseEvent.BUTTON1) {
        return mouseButton1;
    }
    if (buttonId == MouseEvent.BUTTON2) {
        return mouseButton2;
    }
    return false;
}

public int getMouseX() {
    return (int) mousePos.getX();
}

public int getMouseY() {
    return (int) mousePos.getY();
}

public Point getMousePos() {
    return mousePos;
}

@Override
public void mouseClicked(MouseEvent e) {
}

@Override
public void mousePressed(MouseEvent e) {
    if (e.getButton() == MouseEvent.BUTTON1) {
        mouseButton1 = true;
    }
    if (e.getButton() == MouseEvent.BUTTON2) {
        mouseButton2 = true;
    }
}

@Override
public void mouseReleased(MouseEvent e) {
    if (e.getButton() == MouseEvent.BUTTON1) {
        mouseButton1 = false;
    }
    if (e.getButton() == MouseEvent.BUTTON2) {
        mouseButton2 = false;
    }
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}

@Override
public void mouseDragged(MouseEvent e) {
}

@Override
public void mouseMoved(MouseEvent e) {
    mousePos.setLocation(e.getPoint());
}

}[/code]

Grato!

É claro que vai retornar zero, afinal, seu construtor faz

mousePos = new Point();

que constrói e inicializa o mousePos em (0,0).
Para capturar a posição do mouse na Tela você pode fazer

mousePos = MouseInfo.getPointerInfo().getLocation();  

[quote=Erick09]É claro que vai retornar zero, afinal, seu construtor faz

mousePos = new Point();

que constrói e inicializa o mousePos em (0,0).
Para capturar a posição do mouse na Tela você pode fazer

mousePos = MouseInfo.getPointerInfo().getLocation();  

[/quote]

Primeiro, obrigado pela resposta.

Segundo, de fato, o valor do retornado é capturado, porem é capturado apenas na inicialização do programa (ou seja, não esta atualizando dentro do programa) e é capturado relativamente ao monitor e nao à aplicação.

Só pra destacar, os metodos responsaveis por ler o click do mouse tambem nao estao funcionando. Nenhum metodo do mouse tah dando certo, porem todos do teclado estao perfeitos.

Verdade, por isso você deve atualizar no momento do evento, não no momento que inicializa veja

//Assim você obterá a posição no momento que for pedido
public int getMouseX() {  
        	mousePos = MouseInfo.getPointerInfo().getLocation();  
            return (int) mousePos.getX();  
        }  

Se você quiser capturar a posição do Mouse em função do JFrame o metodo getMousePosition() da classe Container deve servir

[quote=Erick09]Verdade, por isso você deve atualizar no momento do evento, não no momento que inicializa veja

//Assim você obterá a posição no momento que for pedido
public int getMouseX() {  
        	mousePos = MouseInfo.getPointerInfo().getLocation();  
            return (int) mousePos.getX();  
        }  

Se você quiser capturar a posição do Mouse em função do JFrame o metodo getMousePosition() da classe Container deve servir[/quote]

Novamente, obrigado pela resposta (e paciencia), mas ainda nao deu. O valor continua nao atualizando. Criei um metodo interno na outra classe e com o metodo interno deu certo. So que nao segue os padroes da boa programaçao do java. De qualquer modo vou colocar o codigo pra ver se vc, ou alguem mais, ve alguma saida.

[code]public void updateMouseEvent(MouseEvent mouseevent, MouseEvent motion) {
System.out.println(InputManager.getInstance().getMouseX()); //aqui o valor mostrado nao eh atualizado
System.out.println(InputManager.getInstance().isMousePressed(MouseEvent.BUTTON1)); //aqui nao reconhece o click (deveria retornar true, mas sempre retorna false)
System.out.println(InputManager.getInstance().getMousePos().x); //aqui o valor mostrado nao eh atualizado

    System.out.println(motion.getX()); //aqui o valor mostrado eh atualizado normalmente

}[/code]

Vamos fazer como o Jack, o Estripador e vamos por partes:
Primeiro o código que eu postei era uma modificação do método que já existia na sua classe InputManager, o fato dos valores não atualizarem e porque em nenhum momento e dito para eles serem atualizados.
Uma forma mais evidente de mostrar a necessidade de alterar os valores

public int getMouseX(Point p) {  
       	mousePos = p;
        return (int) mousePos.getX();  
}

E por isso que os métodos do teclado estão aparecendo corretamente já que a maioria deles recebe algum parâmetro

Segundo de uma olhada aqui e veja explicação da própria Oracle de como escrever um MouseListner.

Blz, Erick09. Vlw pela ajuda. Acho que, finalmente, peguei a ideia.

[quote=Erick09]Vamos fazer como o Jack, o Estripador e vamos por partes:
Primeiro o código que eu postei era uma modificação do método que já existia na sua classe InputManager, o fato dos valores não atualizarem e porque em nenhum momento e dito para eles serem atualizados.
Uma forma mais evidente de mostrar a necessidade de alterar os valores

public int getMouseX(Point p) {  
       	mousePos = p;
        return (int) mousePos.getX();  
}

E por isso que os métodos do teclado estão aparecendo corretamente já que a maioria deles recebe algum parâmetro

Segundo de uma olhada aqui e veja explicação da própria Oracle de como escrever um MouseListner. [/quote]

Opa valeu essa dica.
Outro dia estava utilizando um construtor de evento nativo no NetBeans mas ele sempre
lançava exceção e eu tinha que fazer na unha como evento e ouvinte simples
em casos de capturar ações do mouse.

Vou ver tudo que falaram testando aqui.