我正在制作一个简单的应用程序,其中有菜单屏幕和游戏屏幕。在菜单屏幕上有一个按钮,如果你用鼠标点击它,菜单屏幕会切换到游戏屏幕,其中有一些简单的游戏玩法。
主类(它扩展了JFrame)管理屏幕切换并通过cardlayout设置屏幕。它设置了一个JFrame和一个名为cardpanel的JPanel。 Cardpanel然后补充说:
cardPanel.add(menu, "menuscreen");
cardPanel.add(game, "gamescreen");
菜单和游戏是对其类的引用(类扩展了JPanel)。
问题在于,当我尝试在菜单中添加注册到mouselistener的JPanel p时,单击它时没有任何反应。我试图将p直接添加到主类中并且它起作用,因为菜单是默认的可见屏幕,但是当切换到游戏室时,用户键盘输入不起作用。当游戏屏幕是默认屏幕时,p直接添加到main中,输入不起作用。所以我真的必须在菜单屏幕中添加p,此外,它使代码看起来更好。
感谢您的帮助和建议!
这是菜单类代码,我试图在其中添加p :(删除无关的绘图)
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Menu extends JPanel implements ActionListener, MouseListener, Commons{
public static int points = 0;
public int xMouse;
public int yMouse;
private Timer timer;
private Image image;
private String backMenu = "backMenu.png";
private Go go;
private Logo logo;
JPanel p = new JPanel();
public Main main;
public Menu(Main main){
add(p);
this.main = main;
timer = new Timer(5, this);
timer.start();
ImageIcon ii = new ImageIcon(getClass().getResource(backMenu));
image = ii.getImage();
go = new Go();
logo = new Logo();
setVisible(true);
setFocusable(true);
p.addMouseListener(this);
p.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
repaint();;
}
@Override
public void mouseClicked(MouseEvent e) {
if ((e.getX() > go.getX()) && (e.getX() < go.getX()+go.getWidth())){
if ((e.getY() > go.getY()) && (e.getY() < go.getY()+go.getHeight()))
{
main.changeScreen();
}
}
}
}