首页 > Java > java教程 > 尽管使用了 repaint(),为什么我的扩展 JPanel 的 PaintComponent() 方法没有被调用?

尽管使用了 repaint(),为什么我的扩展 JPanel 的 PaintComponent() 方法没有被调用?

DDD
发布: 2024-12-14 21:38:14
原创
882 人浏览过

Why Isn't My Extended JPanel's paintComponent() Method Being Called Despite Using repaint()?

程序无法访问扩展 JPanel 类的 PaintComponent() 方法

问题

提供的代码具有 JFrame 及其相应的 JPanel 扩展。当重复调用 JPanel 的 repaint() 方法时,它无法执行 paintComponent() 方法。这导致怀疑 imageDimension 对象可能是问题的根源。

解决方案

虽然提供的上下文没有显式引用字节数组,但它看起来目标是创建灰度缩略图并将它们分配给组件的图标。下面的示例代码提供了一种将现有示例图标转换为灰度并使用 setIcon() 更新组件的方法。这种方法可以应用于任何图像。

值得注意的是,上述灰度转换可以使用 ColorConvertOp 或通过更新组件本身而不是其图标来实现。

导入 java.awt.*;<br>导入javax.swing.*;</p>
<p>public class IconExample {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public static void main(String[] args) {
    // Create a list of icons
    List<Icon> icons = new ArrayList<>();
    icons.add(new ImageIcon("image1.png"));
    icons.add(new ImageIcon("image2.png"));

    // Create a panel to hold the icons
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(1, icons.size()));

    // Add the icons to the panel
    for (Icon icon : icons) {
        panel.add(new JLabel(icon));
    }

    // Create a frame for the panel
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.add(panel);

    // Make the frame visible
    frame.setVisible(true);

    // Create a timer to update the icons
    Timer timer = new Timer(1000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // Shuffle the icons
            Collections.shuffle(icons);

            // Update the icons in the panel
            for (int i = 0; i < icons.size(); i++) {
                panel.getComponent(i).setIcon(icons.get(i));
            }

            // Repaint the panel
            panel.repaint();
        }
    });

    // Start the timer
    timer.start();
}
登录后复制

}

此示例说明了 Collections.shuffle 随机化图标顺序并每秒更新面板中的图标。 repaint() 方法确保更改在屏幕上可见,并且图标不断更新。

通过提供这种替代方法,我们证明了与

相关的问题PaintComponent() 方法可能与 imageDimension 对象无关,而是源于原始图形和图像处理的特定实现代码。

以上是尽管使用了 repaint(),为什么我的扩展 JPanel 的 PaintComponent() 方法没有被调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板