使用画布在Jpanel中添加图像

时间:2014-09-04 17:44:36

标签: java swing canvas netbeans jpanel

我想将图像添加到由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();

但图片没有显示。怎么解决?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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. 然后在设计视图中右键单击标签,并为标签设置布局管理器。然后,您可以开始向标签添加组件。