首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将画布更改为JFrame

将画布更改为JFrame
EN

Stack Overflow用户
提问于 2013-06-17 20:14:34
回答 1查看 236关注 0票数 0

我想将extend Canvas更改为JFrame。但是为什么我的程序不能运行呢?命令提示符报告:

代码语言:javascript
复制
Exception in thread "main" java.langIllegalArgumentException: 
  adding a window to a container 
  at java.awt.Container.chekNotAWindow(Container.java:483)" and so many more  

下面是我的代码:

代码语言:javascript
复制
  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);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-06-17 20:22:28

从本质上讲,一个窗口(或本例中的框架)不能添加到另一个窗口。

不是使用

代码语言:javascript
复制
JFrame window = new JFrame("aaaa");

使用

代码语言:javascript
复制
Layar window = new Layar();

一旦您将Layar更改为从JFrame扩展。

话虽如此。就个人而言,您最好简单地从JPanel扩展,并继续将Layar添加到您创建的框架中。与尝试从顶级容器扩展相比,您将从自定义绘制中获得更好的性能。

您可能还想看看Custom Painting,因为您应该重写Swing组件的paintComponent,而不是paint

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17147252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档