【问题标题】:Background in JPanel repaintJPanel 中的背景重绘
【发布时间】:2017-07-25 16:42:05
【问题描述】:

我有一个有多个图层的程序,在底层我有一个 JPanel,我在上面放了一个背景图像。最重要的是,我有一个 JLayeredPane,它有一些可拖动的组件。我的问题是,当用户上传背景图像时,可拖动组件确实滞后,我的猜测是,这是因为摆动在拖动时一直在重新绘制背景图像。我的问题是,是否无论如何都要确保图像不会一直重新绘制? 我绘制图像的代码如下所示:

if (this.getLoadedBackgroundImage() != null) {
        try {
            BufferedImage bufferedImage = ImageIO.read(this.getLoadedBackgroundImage());
            Image bImage = bufferedImage.getScaledInstance(this.getWidth() - 5 - jPanel6.getWidth() -5, this.getHeight() - jPanel2.getHeight() - jPanel3.getHeight() - tabPanel.getHeight(), Image.SCALE_FAST);
            graphics2d.drawImage(bImage, 5, jPanel2.getHeight() + tabPanel.getHeight()+5, null);
        } catch (IOException ex) {
            Logger.getLogger(MainViewLayeredPane.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

【问题讨论】:

    标签: java swing jpanel paintcomponent jlayeredpane


    【解决方案1】:

    不要使用paintComponent 方法加载或调整图像大小,这些都是昂贵的操作,而是预先缓存它并且只绘制缓存的版本

    【讨论】:

    • 但是如果窗口的大小改变了,我需要为图像计算一个新的大小,对吧?或者我应该在 windowChangeEvent 的其他地方或类似的地方这样做吗?
    • 所以?当窗口大小发生变化时,计算新的大小,从原始调整图像大小并重新绘制 - For example
    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    相关资源
    最近更新 更多