【发布时间】:2019-08-30 00:47:34
【问题描述】:
我正在构建 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 引起的问题,但我不知道如何解决。
【问题讨论】:
-
好吧,这是很多令人费解的代码 - 你使用静态和最终为什么?你能控制它还是看起来很酷???我建议把它撕成菜单——看看你能不能显示出来
-
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2)
public void update (Graphics g) { paint (g); }你在想什么?如果它没有损坏,请不要“修复”它。 3) 自定义绘制面板在哪里返回合理的首选尺寸以供布局管理器使用.. 4) 哦,NVM。我能问的大部分内容都会在 MCVE / SSCCE 中变得显而易见。 -
这段代码的许多块对于演示问题并不是必不可少的。按照建议发布 mcve / sscce。
-
刚刚注意到另一个“你在想什么?”的时刻。
static final PongGameMain game = new PongGameMain ()。这是在 ..PongGameMain的类结构中声明的。(抓挠头)还有static final JPanel gamePanel = new JPanel ();..不要为 GUI 组件声明static。这是一种掩盖错误设计的技巧,并会导致更多问题。弄清楚如何使用非静态组件来做到这一点,这样做通常会解决问题。跨度> -
感谢您的所有回答。首先我编辑了代码。
标签: java swing awt bufferedimage drawimage