문제

Hi I'm trying to program a game using java. This is my first time using java, I am used to C#. In C# I would call Mouse.getLocation() and create a rect using the mouses location. Then by using if(Mouse.Left().toString() == "Pressed") I would then check if the mouse rect intersected with any other objects and act accordingly.

I've noticed in java you aren't provided with methods like these. So I was wondering, is the best way to approach mouse input simply to add listeners on all my clickable objects? I understand listeners and have a good idea how to use them but I was just wanting to check if there are more efficient ways to handle input or ways geared more towards what I'm most conformable with.

도움이 되었습니까?

해결책

  • let your frame implement the MouseListener interface
  • implement all abstract methods, but in your case it is probably the mouseClicked event
  • identify if the button clicked is a left click, using the SwingUtilities class
  • if it is a left click, then set the x and y, which is the location of your click relative to the frame, not the screen.

    public class MouseListeningObject extends JFrame implements MouseListener {

    int x, y;

    public MouseListeningObject () { addMouseListener(this); }

    @Override public void mouseClicked(MouseEvent e) { if(SwingUtilities.isLeftMouseButton(e)){ x = e.getX(); y = e.getY(); } }

    @Override public void mousePressed(MouseEvent e) { // Some codes here }

    @Override public void mouseReleased(MouseEvent e) { // Some codes here }

    @Override public void mouseEntered(MouseEvent e) { // Some codes here }

    @Override public void mouseExited(MouseEvent e) { // Some codes here } }

다른 팁

You want your frame to implement MouseListener then add it in the constructor.

class MyFrame extends JFrame implements MouseListener {
    MyFrame() {
        addMouseListener(this);
    } 
    @Override
    public void mousePressed(MouseEvent e) {}
    @Override
    public void mouseEntered(MouseEvent e) {}
    @Override
    public void mouseExited(MouseEvent e) {}
    @Override
    public void mouseReleased(MouseEvent e) {}
} 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top