如何在 JFrame 的其他东西下面添加一个 mouselistener?
How to add a mouselistener below other things in the JFrame?
如果我的问题听起来很愚蠢,对不起,我对 java 还是个新手。我将向您展示这段代码:
public class Window extends JFrame{
private static final long serialVersionUID = -2139430787087799923L;
private TransparentJPanel mousepanel;
public Window(int width, int height, String title, Game game) {
super(title);
HandlerClass handler = new HandlerClass();
mousepanel = new TransparentJPanel();
mousepanel.addMouseListener(handler);
setPreferredSize(new Dimension(width,height));
setMaximumSize(new Dimension(width,height));
setMinimumSize(new Dimension(width,height));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
add(game); <-- here I add the game
add(mousepanel); <-- here I add the panel with the mouselistener
game.start();
}
}
TransparentJPanel class:
private class TransparentJPanel extends JPanel {
private static final long serialVersionUID = 8855609189172945035L;
TransparentJPanel() {
super() ;
this.setOpaque( false ) ;
this.setLayout( null ) ;
}
}
当我先添加游戏时,游戏出现了,但鼠标监听器不起作用,但是当我先添加jpanel时,游戏没有出现,但鼠标监听器起作用了。
这是我的 HandlerClass class:
private class HandlerClass implements MouseListener {
public void mouseClicked(MouseEvent event) {
System.out.println(String.format("Clicked at %d,%d", event.getX(), event.getY()));
}
public void mouseEntered(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Entered frame at X: " + x + " - Y: " + y);
}
public void mouseExited(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Exited frame at X: " + x + " - Y: " + y);
}
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Pressed frame at X: " + x + " - Y: " + y);
}
public void mouseReleased(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Released at X: " + x + " - Y: " + y);
}
}
所以,这是我的问题。
请帮忙。
事实证明解决方案很简单!
你可以在游戏对象中添加鼠标监听器,而不是为鼠标监听器创建面板,即如下
public Window(int width, int title, String title, Game game) {
super(title);
HandlerClass handler = new HandlerClass();
setPreferredSize(new Dimension(width,height));
setMaximumSize(new Dimension(width,height));
setMinimumSize(new Dimension(width,height));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
add(game, BorderLayout.CENTER);
game.addMouseListener(handler);
game.start();
}
希望对您有所帮助!
如果我的问题听起来很愚蠢,对不起,我对 java 还是个新手。我将向您展示这段代码:
public class Window extends JFrame{
private static final long serialVersionUID = -2139430787087799923L;
private TransparentJPanel mousepanel;
public Window(int width, int height, String title, Game game) {
super(title);
HandlerClass handler = new HandlerClass();
mousepanel = new TransparentJPanel();
mousepanel.addMouseListener(handler);
setPreferredSize(new Dimension(width,height));
setMaximumSize(new Dimension(width,height));
setMinimumSize(new Dimension(width,height));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
add(game); <-- here I add the game
add(mousepanel); <-- here I add the panel with the mouselistener
game.start();
}
}
TransparentJPanel class:
private class TransparentJPanel extends JPanel {
private static final long serialVersionUID = 8855609189172945035L;
TransparentJPanel() {
super() ;
this.setOpaque( false ) ;
this.setLayout( null ) ;
}
}
当我先添加游戏时,游戏出现了,但鼠标监听器不起作用,但是当我先添加jpanel时,游戏没有出现,但鼠标监听器起作用了。 这是我的 HandlerClass class:
private class HandlerClass implements MouseListener {
public void mouseClicked(MouseEvent event) {
System.out.println(String.format("Clicked at %d,%d", event.getX(), event.getY()));
}
public void mouseEntered(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Entered frame at X: " + x + " - Y: " + y);
}
public void mouseExited(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Exited frame at X: " + x + " - Y: " + y);
}
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Pressed frame at X: " + x + " - Y: " + y);
}
public void mouseReleased(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Released at X: " + x + " - Y: " + y);
}
}
所以,这是我的问题。 请帮忙。
事实证明解决方案很简单!
你可以在游戏对象中添加鼠标监听器,而不是为鼠标监听器创建面板,即如下
public Window(int width, int title, String title, Game game) {
super(title);
HandlerClass handler = new HandlerClass();
setPreferredSize(new Dimension(width,height));
setMaximumSize(new Dimension(width,height));
setMinimumSize(new Dimension(width,height));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
add(game, BorderLayout.CENTER);
game.addMouseListener(handler);
game.start();
}
希望对您有所帮助!