当前位置: 首页 > 知识库问答 >
问题:

如何在JFrame中使用bufferedimage进行图像渲染?

能远
2023-03-14
    public static void createWindow() {
        frame = new JFrame("PlanetSim");
        
        frame.setPreferredSize(new Dimension(WINDOW_X, WINDOW_Y));
        frame.setMaximumSize(new Dimension(WINDOW_X, WINDOW_Y));
        frame.setMinimumSize(new Dimension(WINDOW_X, WINDOW_Y));

        foregroundLabel = new JLabel(new ImageIcon(foreground));
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.add(foregroundLabel);
        frame.pack();
        
        frame.setVisible(true);
    }

    public static void setForeground() {
        frame.getContentPane().remove(foregroundLabel);
        foregroundLabel = new JLabel(new ImageIcon(foreground));
        frame.getContentPane().add(foregroundLabel);
        frame.pack();
    }
    public void run() {
        long lastTime = System.nanoTime(), now; //keeps track of time on computer in nanoseconds
        double amountOfTicks = 60.0; //number of ticks per rendering
        double delta = 0; //time step 
        long timer = System.currentTimeMillis(); //timer to display FPS every 1000 ms
        int frames = 0;

        while (running) {
            now = System.nanoTime();
            delta += (now - lastTime) * amountOfTicks / 1000000000;
            lastTime = now;
            while(delta >= 1) {
                tick();
                delta--;
            }
            if (running)
                render();
            frames++;

            if (System.currentTimeMillis() - timer > 1000) {
                timer += 1000;
                System.out.println("FPS: " + frames);
                frames = 0;
            }
        }   
    }

    public void render() {
        populateWindow();
        Window.setForeground();
    }

共有1个答案

池赞
2023-03-14
    frame.getContentPane().remove(foregroundLabel);
    foregroundLabel = new JLabel(new ImageIcon(foreground));
    frame.getContentPane().add(foregroundLabel);
    frame.pack();

我会建议没有必要删除/添加标签或包装框架,因为我会假设图标将是相同的大小每次。

你所需要做的就是替换标签的图标。

    //frame.getContentPane().remove(foregroundLabel);
    foregroundLabel.setIcon( new ImageIcon(foreground) );
    //frame.getContentPane().add(foregroundLabel);
    //frame.pack();

我试图呈现一组复杂的对象,而不是试图单独呈现每个对象,我认为将它们呈现为BufferedImage会更快

 类似资料:
  • 问题内容: 我想在同一JFrame中显示同一图像的变体,例如在JFrame中显示图像,然后将其替换为同一图像的灰度。 问题答案: 每当您更新图像时,都必须重新粉刷。 这是一个有关该主题的简单Google提出的内容:(我将这些教程用于我的所有Java编码) Java教程:绘制图像

  • 我试图从包含html代码的Java字符串生成pdf文档。我使用“Freemarker”作为模板引擎来生成html内容,然后使用“Flying Discer”将生成的html转换为pdf。我的问题是,图像不会在生成的pdf中呈现。关于我如何生成的具体细节如下: 生成的html(仅显示相关部分)为: 此代码作为部署在Tomcat上的War运行。作为tree命令(在WEB-INF中运行)的输出,图像在战

  • 终端输出 我正在尝试获取存储在mongodb数据库中的图像,以便检索并渲染到浏览器。我已经尝试过一些以前的解决方案,如btoa、Windows。btoa,但它说两者都没有定义。(https://stackoverflow.com/questions/6182315/how-to-do-base64-encoding-in-node-js)(https://stackoverflow.com/que

  • 我想在PDF上渲染图像,这将由FOP生成。为了渲染图像,我使用了标签< code > 我还尝试将完整的URL设置为: 在控制器中,我有一个请求映射,该映射从中获取图像名称 但是当我生成PDF时,我发现日志文件中的错误为: 但是,如果我复制这个URL并粘贴到URL中,那么图像会显示在浏览器中,我还发现,当我生成PDF时,应该调用图像解密的请求映射没有被调用。 更新 另外一个奇怪的想法是,我发现如果w

  • 问题内容: 我有一个panel.java文件,看起来像下面的代码: 我想显示test.gif文件。我该如何完成?因为当我在Eclipse中运行它时,我只会得到其中没有图像的jframe。 问题答案: 用这个