2015-02-01 3 views
-2

Я создаю новый игровой класс, который является в основном графическим интерфейсом для моей игры. Я хочу добавить mouselistener, чтобы я мог проверить, когда пользователь нажимает на разные вещи. Тем не менее, я изо всех сил пытаюсь заставить основы работать. Вот что я до сих пор. Класс игры значительно сложнее, но отлично работает, только у moselistener нет. Сама игра - это большая площадь с множеством разных форм.Java Mouselistener не добавляется

public class Game extends JPanel { 
public Game() { 

f = new JFrame(); 

f.getContentPane().addMouseListener(new MouseAdapter() { 


     @Override 
     public void mousePressed(MouseEvent e) { 
      System.out.println(e.getX() + " " + e.getY()); 

     } 

    }); 

В качестве альтернативы, я попробовал просто добавить mouselistener в класс Game, но это тоже не сработало.

+0

Где вы добавляете свой 'JFrame f' в GUI? Если вы не добавите его, слушатель мыши не будет реагировать ни на что, так как кадр не отображается. –

+0

@ AndyBrown Как мне это сделать? когда я пытаюсь .add (f) Я получаю «java.lang.IllegalArgumentException: добавление родителя контейнера к себе» – John

+0

У вас есть приложение, которое показывается на экране? –

ответ

1

Посмотрите на How to Write a Mouse Listener.

Приведенный ниже пример делает добавление MouseListener в JPanel, отслеживает точку, в которой происходит и обрабатывает MouseEvent и соответствующим образом перекрашивает компонент.

Click

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Point; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private Point clickPoint; 

     public TestPane() { 
      addMouseListener(new MouseAdapter() { 

       @Override 
       public void mouseClicked(MouseEvent e) { 
        clickPoint = e.getPoint(); 
        repaint(); 
       } 

      }); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      if (clickPoint != null) { 
       Graphics2D g2d = (Graphics2D) g.create(); 
       g2d.fillOval(clickPoint.x - 5, clickPoint.y - 5, 10, 10); 
       g2d.dispose(); 
      } 
     } 

    } 

} 

Теперь, возможно, вы хотели бы, чтобы обеспечить runnable example, который демонстрирует вашу проблему particualr.