Java 没有添加 Mouselistener
Java Mouselistener not being added
我正在创建一个新游戏 class,它基本上是我游戏的 GUI。我想添加一个鼠标侦听器,以便我可以检查用户何时单击不同的东西。但是,我正在努力使基础知识发挥作用。这是我到目前为止所拥有的。游戏 class 要复杂得多,但运行良好,只有 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 添加到游戏中 class 但这也没有用。
看看How to Write a Mouse Listener。
下面的例子做了更多的事情,将 MouseListener
添加到 JPanel
,跟踪 MouseEvent
发生的点并相应地重新绘制组件。
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 来说明您的特定问题。
我正在创建一个新游戏 class,它基本上是我游戏的 GUI。我想添加一个鼠标侦听器,以便我可以检查用户何时单击不同的东西。但是,我正在努力使基础知识发挥作用。这是我到目前为止所拥有的。游戏 class 要复杂得多,但运行良好,只有 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 添加到游戏中 class 但这也没有用。
看看How to Write a Mouse Listener。
下面的例子做了更多的事情,将 MouseListener
添加到 JPanel
,跟踪 MouseEvent
发生的点并相应地重新绘制组件。
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 来说明您的特定问题。