为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2022-09-14 10:22:15
“我的侦听器”已添加到“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);            }        });这是游戏开始的:问题就在这里。主菜单很好,但去这里时,它不接受也不读取任何密钥。
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

主要问题

“主要”问题是,对于在Swing中监视键盘输入是一个糟糕的选择,它存在焦点问题,其中它注册的组件必须是可聚焦的并且具有键盘焦点,并且由于您要向UI添加按钮,因此它们将从组件中窃取焦点。KeyListener

一个更好的整体解决方案是使用键绑定 API,它为您提供了控制,以确定应在哪个焦点级别触发绑定

其他问题...

null众所周知,布局难以管理和维护。有很多因素可以确定组件在屏幕上的最佳显示方式。您应该尽可能避免布局,并使用一个或多个布局管理器,它们将节省大量头发null

你已经覆盖了,但你未能尊重油漆链(通过不调用)。绘画是一个复杂的过程,由许多步骤组成。paintsuper.paint

作为一般规则,您应该覆盖(并在进行任何自定义绘制之前调用)。paintComponentsuper.paintComponent

阅读AWT中的绘画和摇摆和执行自定义绘画,以获取有关在摇摆中绘画的更多详细信息


查看完整回答
反对 回复 2022-09-14
?
UYOU

TA贡献1878条经验 获得超4个赞

您没有将键侦听器添加到JPnael中,仅仅实现接口是不够的,您必须将其添加到面板中。

addKeyListner(this);

将此行代码添加到构造函数中。


查看完整回答
反对 回复 2022-09-14
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号