Atualizar os valores do mouse em uma classe MouseInputListener

2 respostas
F

Ola. Não estou conseguindo atualizar os valores do mouse em uma classe MouseInputListener. A princípio pensei que pelos métodos serem @Override iriam atualizar os valores, mas não atualizou. Em seguida, pensei em chamá-los manualmente no método run, mas não sei como fazê-lo (por conta do event) e não creio que seja a solução correta. A chamada à classe é feita da seguinte maneira:

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

O resultado é sempre 0.
Vale ressaltar que os valores referentes ao teclado estão corretos.
Segue a classe:

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<Integer> pressedKeys;
    private ArrayList<Integer> 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());
    }
}

Grato.

2 Respostas

F

Este tópico está duplicado. Ocorreu um erro quando o criei a primeira vez e por isso o fiz novamente. Se alguem puder deletá-lo, agradeço.

JavaDreams

Manda uma mensagem para algum moderador, administrador ou então para [email removido]
e pede para retirarem o tópico duplicado.

Não esquece de por RESOLVIDO na frente do teu título quando o problema for resolvido.

Criado 9 de agosto de 2013
Ultima resposta 22 de ago. de 2013
Respostas 2
Participantes 2