java - 使用canvas在Jpanel中添加图像

标签 java swing canvas netbeans jpanel

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

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

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

最佳答案

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

关于java - 使用canvas在Jpanel中添加图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25671865/

相关文章:

java - 如何使用给定的时间戳将第一个月和最后一个月构建为时间戳?

JAVA 在 JMenuItem[] 构造函数中声明未初始化的 JMenuItem() 项

javascript - 如何在 <canvas> 上绘制文本,它遵循使用 quadraticCurveTo 方法绘制的二次曲线

java - 如何停止java中所有正在运行的计时器?

java - 如何设置 JTextField 的大小(以像素为单位)

javascript - 如何获取 Canvas 上图像的坐标?

javascript - FabricJS:垂直对齐文本中心

java - Java 中日历的字符串时间戳?

java - Spring Boot 使用请求范围的 bean 进行依赖注入(inject)

java - 尝试避免 Java 中的 getClass()