当前位置: 首页 > 知识库问答 >
问题:

绘制到Jpanel中的缓冲图像

笪俊迈
2023-03-14

我目前正在尝试制作一个画布,我可以绘制的东西,并使它出现在一个JFrame。

为此,我打算在一个JPanel组件中有一个BufferedImage,paintComponent方法可以从中进行绘制。

理想情况下,我希望能够从给定的JFrame中引用这个缓冲图像,然后使用其Graphics2D向其绘制素材,paintComponent方法可以在使用缓冲图像绘制时显示这些素材。

我这样做是为了避免直接使用paintcomponent方法,我希望能够从程序中的任何地方引用这个画布,并在调用frames repaint()方法时绘制它。

class MyPanel extends JPanel {
    BufferedImage img = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
    Graphics2D  imgG2 = img.createGraphics();

    public Graphics2D getGraphics() {
        return imgG2;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        int w = img.getWidth();
        int h = img.getHeight();
        g2.drawImage(img, 0, 0, w, h, null);
    }
}
class Main {

private static JFrame createAndShowGui() {
      JFrame frame = new JFrame("droneFrame");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.add(new MyPanel());
      frame.setSize(500, 500);
      frame.setResizable(false);
      frame.setVisible(true);

      return frame;
}

public static void main(String args[]) {
    JFrame frame = createAndShowGui();

    //Something here to reference the inner Jpanels imgG2 field, and draw to it.

    frame.repaint();
    //Draw whatever is currently in the buffered image.
}
}

然而,我不知道如何做到这一点,因为frame.getComponent(0)只是返回一个组件,而不是它的特定类型。

提前道谢。

共有1个答案

崔博延
2023-03-14

为了解决这个问题,您需要将JFrame的内容窗格设置为JPanel,然后引用缓冲图像的图形,您需要获取JFrame的内容窗格,并将其向下转换为特定类型MyPanel。

现在您有了正确格式的内容窗格,并且可以引用图形,因为它现在有了该字段。

 类似资料:
  • 问题内容: 我正在设计一个程序,该程序在JFrame中包含两个JPanel,一个用于保存图像,另一个用于保存GUI组件(Searchfields等)。我想知道如何将图像绘制到JFrame中的第一个JPanel? 这是我的构造函数的示例代码: } 我试图覆盖JPanel的paintComponent方法来绘制图像,但是当我尝试编写时,这在我的构造函数中导致了一个问题: 因为这将只允许我传递null的

  • 问题内容: 如何将图像绘制到JPanel或JFrame,我已经阅读了oracle的相关教程,但似乎无法正确完成。我需要将图像“ ”显示在一组特定的坐标上。这是我到目前为止所拥有的。 在Main()中 提前致谢! 问题答案: 试试这个:

  • 我试图保存一个自助式图像,我已经画了一个新的文件。我打开这个文件,使用图形2d在上面绘制(然后在JFrame中显示图像,以确保其工作,它确实这样做),然后将其保存到一个新文件中。 问题是:保存的文件只是原始图像。它不包含我在上面绘制的任何新图形。 以下是我的代码的简化版本: 稍后在另一种方法中: 相关方法:

  • 简短版本:是否可以(通过Graphics2D)绘制到自定义缓冲区类(“稀疏”光栅图像)? 更长的版本:我想将多边形(由闭合路径给定)转换为光栅图像。 但是由于多边形可能非常大(这是一个研究项目),我必须使用稀疏存储(项目的这部分已经由我之前的人实现了) 由于实现(高效)光栅算法非常耗时,我想使用java已经提供的方法(例如Graphics2D),而不是绘制到BufferedImage中,尝试绘制到

  • 导语 在前面一节中,讲述了如何实现简单的涂鸦板,这一次我们将实现在涂鸦板上绘制图形,这里以矩形为例进行讲解。在后面还会提出双缓冲绘图的概念。 环境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2 目录 一、绘制矩形 二、双缓冲绘图 正文 一、绘制矩形 1.我们仍然在前面程序的基础上进行修改,先更改painEvent()函数: void Dialog::paintEven

  • 我在artPanel JPanel类中实现了MouseListener和MouseMotionListener。看来这解决了我的一些问题。但有几个问题: 您可以在这里下载我的java文件,以便更容易地识别问题。 我想不通的问题: “行”按钮无法正确创建行。我一直在玩mouseListener方法,但我无法使其工作。我希望它在单击和拖动鼠标的同时只画一条线。 其他按钮可以正确绘制形状。然而...当我