Java 使用画布在Jpanel中添加图像

Java 使用画布在Jpanel中添加图像,java,swing,canvas,netbeans,jpanel,Java,Swing,Canvas,Netbeans,Jpanel,我想将图像添加到由Netbeans GUI设计器创建的面板中。 这是我的画布课 private static class GraphicsClass extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); Toolkit tkit; tkit=getToolkit(); Image im

我想将图像添加到由Netbeans GUI设计器创建的面板中。 这是我的画布课

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();

但是图像没有显示出来。如何修复它

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

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
方法中的代码是自动生成的,默认情况下不可编辑。你可以编辑它,但我建议不要(除非你真的知道自己在做什么)。如果你看一下代码,你就会明白我一开始想说什么

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

其他注意事项:

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

  • 如果要创建图像(例如背景图像),可以使用
    ImageIcon
    JLabel
    来代替面板,并将布局管理器设置为标签,然后可以开始将组件添加到标签上

  • 拖放标签
  • 转到标签的属性并单击。。。
    图标的属性。在该对话框中,可以浏览图像
  • 然后在设计视图中的标签上单击鼠标右键,然后为标签设置布局管理器。然后,可以开始向标签添加零部件

我使用了这个示例,我修改了paintComponent()函数,就像上面的代码一样,并且正确加载了图像,但我不知道如何将此代码用于我的JPanel,它是由Netbeans构建者创建的。在Netbeans中,选择您的JPanel,go属性调色板,go代码,go自定义创建代码JPanel,扩展为ImageConsumer,在那里,通过将“this”传递给drawImage,它将根据需要安排重新绘制。感谢它确实有效:D,但它在JDK 8中不起作用,它显示了不受支持的major.minor版本52.0,因此我将我的项目更改为JDK 7,我使用的是OpenJDK。谢谢男士:D