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!