gpt4 book ai didi

java - 如何在JPanel中查看BufferedImage?

转载 作者:行者123 更新时间:2023-11-30 01:52:35 26 4
gpt4 key购买 nike

我正在构建 PongClone,但遇到了一个错误。 **我认为该错误是由 JPanel 引起的。

我尝试使用 Image 而不是 BufferedImage。我在paintComponent方法之外尝试了drawImage。我创建另一个面板,然后将该面板添加到主面板中。

菜单类

package me.pong;

import javax.swing.*;

public class TestMenu {
JFrame frame;

public void createFrame () {
TestMain main = new TestMain ();
frame = new JFrame("TEST");
frame.setSize (800, 450);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane ().add (main.panel);
frame.setVisible (true);
}
}

主类

package me.pong;

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;

public class TestMain extends JPanel {
JPanel panel = new JPanel ();
BufferedImage img;
Graphics g;

public static void main (String[] args) {
TestMain testMain = new TestMain ();
TestMenu menu = new TestMenu ();
menu.createFrame ();
testMain.drawGraphics ();
}

public void drawGraphics(){
panel.add (new TestMain ());
img = new BufferedImage(800, 450, BufferedImage.TYPE_INT_RGB);
g = img.createGraphics ();
g.drawString ("TEST STRING 2", 250,250);
}

@Override
protected void paintComponent (Graphics g) {
super.paintComponent (g);
g.clearRect (0,0,800,450);
g.drawImage (img, 0,0,null);
g.setColor (Color.white);
g.drawString ("TEST STRING", 500,250);
g.setColor (Color.black);
g.drawRect (150,100,10,70);
}
}

我希望图像填充组件,但实际输出是一个小盒子。 Just like that

编辑:删除代码并添加MCVE/SSCCE代码(我不知道)。还是一样。如果我将图像添加到框架内,它可以工作,但其他方式则不行。我知道我错过了一些东西,但我不知道那是什么。

**是的。 JPanel 引起的问题,但我不知道如何解决。

最佳答案

在自定义绘制类中声明面板的额外面板不仅是不必要的,而且是问题的根源。请参阅代码中的更多注释。

enter image description here

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;

public class TestMain extends JPanel {

JFrame frame;
// Not needed or useful!
//JPanel panel = new JPanel();
BufferedImage img;
Graphics g;

public static void main(String[] args) {
TestMain testMain = new TestMain();
testMain.createFrame();
testMain.drawGraphics();
}

public void createFrame() {
TestMain main = new TestMain();
frame = new JFrame("TEST");
frame.setSize(400, 250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.getContentPane().add(main.panel);
frame.getContentPane().add(main);
frame.setVisible(true);
}

public void drawGraphics() {
//panel.add(new TestMain());
add(new TestMain());
img = new BufferedImage(800, 450, BufferedImage.TYPE_INT_RGB);
g = img.createGraphics();
g.drawString("TEST STRING 2", 250, 250);
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0, 0, 800, 450);
// all JComponent instances are image observers
//g.drawImage(img, 0, 0, null);
g.drawImage(img, 0, 0, this);
g.setColor(Color.WHITE);
// NEW! Otherwise invisible
g.setColor(Color.RED);
g.drawString("TEST STRING", 200, 100);
g.setColor(Color.BLACK);
g.drawRect(150, 100, 10, 70);
}
}

顺便说一句:

  1. 该代码仍然存在问题,但我认为最好坚持只修复眼前的问题。
  2. 显示 BufferedImage 的最简单方法是通过 ImageIconJLabel 中显示它。

关于java - 如何在JPanel中查看BufferedImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com