我遇到KeyListener问题,我想将keylistener功能分离到其他类,所以我有:
JGame.java
package jgame;
import javax.swing.JFrame;
public class JGame extends JFrame {
public JGame() {
Actions act = new Actions();
addKeyListener(act);
setFocusable(true);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
JGame keys_ = new JGame();
frame.add(keys_);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
和Actions.java
package jgame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Actions implements KeyListener {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 32) {
System.out.println("Pressed spacebar");
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
当我运行此应用程序时,netBeans consol说: "线程中的异常" main" java.lang.IllegalArgumentException:向容器添加窗口 在java.awt.Container.checkNotAWindow(Container.java:488) at java.awt.Container.addImpl(Container.java:1089) at java.awt.Container.add(Container.java:1003) 在javax.swing.JFrame.addImpl(JFrame.java:564) 在java.awt.Container.add(Container.java:415) 在jgame.JGame.main(JGame.java:18) Java结果:1 "
答案 0 :(得分:0)
您正在尝试在致电
时向JFrame
添加JFrame
JFrame frame = new JFrame();
JGame keys_ = new JGame();
frame.add(keys_);
JGame
扩展JFrame
。这是不可能的。一种解决方案是让JGame
代替JPanel
。
请参阅JFrame inside another JFrame以获取参考。
答案 1 :(得分:0)
您无法将Window Class添加到另一个窗口中。
因为这个类将是结束GUI。您可以在其中添加其他组件。
答案 2 :(得分:0)
嗯,你的冲突就在这里:
JFrame frame = new JFrame();
JGame keys_ = new JGame();
frame.add(keys_);
你不能将Frame添加到另一个JFrame,我建议你使用 JinternalFrame :
您可能想要使用JDesktopPane,然后将框架的内容窗格设置为桌面窗格:
JDesktopPane desktop = new JDesktopPane(); //a specialized layered pane
createFrame(); //create first "window"
setContentPane(desktop);
尝试将 JGame设为JinternalFrame ,而不是使用 JDesktopPane
将其添加到JFrame