【问题标题】:add image in Jpanel using canvas使用画布在 Jpanel 中添加图像
【发布时间】:2014-09-04 17:44:35
【问题描述】:

我想将图像添加到由 Netbeans GUI Designer 创建的面板中。 这是我的画布类

private static class GraphicsClass extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Toolkit tkit;
        tkit=getToolkit();
        Image img=tkit.getImage("ampera.jpg");
        g.drawImage(img,0,0,this);
    }
}

这就是我在 JFrame 类构造函数中使用它的方式

this.Jpanel1=new GraphicsClass();

但图像不显示。如何解决?

【问题讨论】:

    标签: java swing canvas netbeans jpanel


    【解决方案1】:
    this.Jpanel1=new GraphicsClass();
    

    行不通。假设您只是将一个面板拖放到框架上并将其命名为Jpanel1,然后在构造函数中执行上述代码。当您第一次拖放原始面板时,它会被初始化并布局。当您执行上述代码时,您正在制作一个新组件。原始面板仍然是添加的面板,并且不是与您刚刚创建的新面板相同的引用面板。所以新面板永远不会显示,它只是一个(没有参考标识符)。就像你有类似的东西

    public class MyFrame extends JFrame {
        public MyFrame() {
            initComponents();
            jPanel1 = new GraphicsClass();
        }
    
        private void initComponent() {
            jPanel1 = new JPanel();
            // add jPanel1 to frame
        }
    
        private class GraphicsClass extends JPanel {}
    
        private JPanel jpanel1;
    }
    

    这是基本的 netbeans 设置。 initComponents 方法中的代码是自动生成的,默认情况下不可编辑。您可以对其进行编辑,但我建议不要这样做(除非您真的知道自己在做什么)。如果你看一下代码,你会明白我一开始所说的。

    修复:从设计器创建了一个面板表单(即 New->Swing Form->JPanel 表单)。然后您可以简单地将面板拖放到框架中,如here

    其他说明:

    • 不要在paintComponent 方法中创建图像。使其成为类成员并在构造函数中创建它。

    • 如果你想创建一个图像(比如背景)而不是面板,你可以使用 ImageIconJLabel 并将布局管理器设置为标签,然后你可以开始添加组件到标签。

      1. 拖放标签
      2. 转到标签的属性并单击icon 属性的...。在对话框中,您可以浏览图片。
      3. 然后在设计视图中右键单击标签,并为标签设置布局管理器。然后您就可以开始向标签添加组件了。

    【讨论】:

    • 感谢它确实有效:D,但它在 JDK 8 中不起作用,它显示不受支持的 major.minor 版本 52.0 所以我将我的项目更改为 JDK 7,我正在使用 OpenJDK。谢谢人:D
    【解决方案2】:

    您可以通过使用 BufferedImage 类或使用 MediaTracker 跟踪图像何时加载来解决此问题

    【讨论】:

    • 我使用这个例子pastebin.com/sLavqRPK,我修改了paintComponent()函数,就像我上面的代码一样,图像加载正确,但我不知道如何将此代码用于我创建的JPanel由 Netbeans Builder 提供
    • 在 NetBeans 中,选择您的 Jpanel,转到属性面板,转到代码,转到自定义创建代码
    • JPanel,通过扩展,是一个 ImageConsumer,通过将“this”传递给 drawImage,它将根据需要安排重绘。
    猜你喜欢
    • 2012-07-22
    • 2013-08-09
    • 2020-09-09
    • 1970-01-01
    • 2015-03-01
    • 2012-07-12
    • 2021-12-22
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多