我想将extend Canvas更改为JFrame。但是为什么我的程序不能运行呢?命令提示符报告:
Exception in thread "main" java.langIllegalArgumentException:
adding a window to a container
at java.awt.Container.chekNotAWindow(Container.java:483)" and so many more 下面是我的代码:
class Layar extends Canvas implements Runnable,KeyListener
\\ init
Layar()
{
super();
try{
//adding a picture
}
catch(Exception e){}
new Thread(this).start();
addKeyListener(this);
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
g.drawImage(img,x_back,y_back+200,null);//background
//key listener
public void run()
{
//try catch
}
public class stage2
{
public static void main(String[] args)
{
JFrame window = new JFrame("aaaa");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLocation(50,50);
window.setSize(700,700);
window.setResizable(false);
window.add(new Layar());
window.setVisible(true);
}
}发布于 2013-06-17 20:22:28
从本质上讲,一个窗口(或本例中的框架)不能添加到另一个窗口。
不是使用
JFrame window = new JFrame("aaaa");使用
Layar window = new Layar();一旦您将Layar更改为从JFrame扩展。
话虽如此。就个人而言,您最好简单地从JPanel扩展,并继续将Layar添加到您创建的框架中。与尝试从顶级容器扩展相比,您将从自定义绘制中获得更好的性能。
您可能还想看看Custom Painting,因为您应该重写Swing组件的paintComponent,而不是paint
https://stackoverflow.com/questions/17147252
复制相似问题