“我的侦听器”已添加到“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
你已经覆盖了,但你未能尊重油漆链(通过不调用)。绘画是一个复杂的过程,由许多步骤组成。paint
super.paint
作为一般规则,您应该覆盖(并在进行任何自定义绘制之前调用)。paintComponent
super.paintComponent
阅读AWT中的绘画和摇摆和执行自定义绘画,以获取有关在摇摆中绘画的更多详细信息

UYOU
TA贡献1878条经验 获得超4个赞
您没有将键侦听器添加到JPnael中,仅仅实现接口是不够的,您必须将其添加到面板中。
addKeyListner(this);
将此行代码添加到构造函数中。
添加回答
举报
0/150
提交
取消