当添加按键侦听器而按键事件在按下时不起作用时,有什么问题?

“我的侦听器”已添加到“J 框架/”小面板“中。问题是,当我按下按钮时,什么也没发生。这里可能有什么问题?


以下是使用的代码:


public class GAMEGAMEHA extends JPanel{


    public static JFrame PacmanMainFrame = new JFrame();

    TheJGame newGame;


    GAMEGAMEHA() {

        setSize(new Dimension(1200, 700));

        JLabel BG = new JLabel();

        JButton start = new JButton();

        JButton howTo = new JButton();

        JButton credit = new JButton();

        JButton exit = new JButton();


        setLayout(null);


        start.setIcon(new ImageIcon(getClass().getResource("/data/SB.png")));


        start.setContentAreaFilled(false);

        start.addActionListener((ActionEvent e) -> {

            newGame = new TheJGame();

            GAMEGAMEHA.PacmanMainFrame.getContentPane().removeAll();

            System.out.println("Removed Components");

            GAMEGAMEHA.PacmanMainFrame.add(newGame);

            System.out.println("Added Game");

            GAMEGAMEHA.PacmanMainFrame.addKeyListener(newGame);

            System.out.println("Added KeyListeners");

            GAMEGAMEHA.PacmanMainFrame.setVisible(true);

            System.out.println("Set Visiblity to True");

        });


        start.setBorderPainted(false);

        add(start);

        start.setBounds(440, 140, 300, 70);


        howTo.setIcon(new ImageIcon(getClass().getResource("/data/HowToButton.jpg")));

        howTo.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e

            ) {

                HowTo HowToScreen = new HowTo();

                GAMEGAMEHA.PacmanMainFrame.getContentPane().removeAll();

                GAMEGAMEHA.PacmanMainFrame.add(HowToScreen);

                GAMEGAMEHA.PacmanMainFrame.setVisible(true);

            }

        });


这是游戏开始的:问题就在这里。主菜单很好,但去这里时,它不接受也不读取任何密钥。


喵喔喔
浏览 95回答 2
2回答

犯罪嫌疑人X

主要问题“主要”问题是,对于在Swing中监视键盘输入是一个糟糕的选择,它存在焦点问题,其中它注册的组件必须是可聚焦的并且具有键盘焦点,并且由于您要向UI添加按钮,因此它们将从组件中窃取焦点。KeyListener一个更好的整体解决方案是使用键绑定 API,它为您提供了控制,以确定应在哪个焦点级别触发绑定其他问题...null众所周知,布局难以管理和维护。有很多因素可以确定组件在屏幕上的最佳显示方式。您应该尽可能避免布局,并使用一个或多个布局管理器,它们将节省大量头发null你已经覆盖了,但你未能尊重油漆链(通过不调用)。绘画是一个复杂的过程,由许多步骤组成。paintsuper.paint作为一般规则,您应该覆盖(并在进行任何自定义绘制之前调用)。paintComponentsuper.paintComponent阅读AWT中的绘画和摇摆和执行自定义绘画,以获取有关在摇摆中绘画的更多详细信息

UYOU

您没有将键侦听器添加到JPnael中,仅仅实现接口是不够的,您必须将其添加到面板中。addKeyListner(this);将此行代码添加到构造函数中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java