【发布时间】:2015-02-03 03:17:59
【问题描述】:
所以我尝试使用 JPanel 'panel' 向我的 JFrame 'frame' 添加多个类,但它似乎没有任何效果。这是我的主要课程:
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Frame
{
public static void main (String[] args)
{
JPanel panel = new JPanel();
panel.setBackground (Color.WHITE);
panel.add (new Player()); // Class with paintComponent method.
panel.add (new Terrain()); // Class with paintComponent method.
JFrame frame = new JFrame ("Java Game");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setSize (1000, 600);
frame.getContentPane().add (panel);
frame.setVisible (true);
}
}
当我运行程序时,JFrame 以白色背景显示,但没有调用来自 Player 和 Terrain 类的 paintComponent 方法,因此没有渲染任何其他内容。这段代码有什么问题吗?谢谢。
编辑:这是我的 Player 和 Terrain 类:
玩家:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
@SuppressWarnings ("serial")
public class Player extends JComponent
{
int x = 50;
int y = 450;
public void paintComponent (Graphics graphics)
{
graphics.setColor (Color.BLACK);
graphics.fillRect (x, y, 50, 50);
}
}
地形:
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JComponent;
@SuppressWarnings ("serial")
public class Terrain extends JComponent
{
Player playerClass = new Player();
public void paintComponent (Graphics graphics)
{
graphics.setColor (Color.GREEN);
graphics.fillRect (0, 500, 1000, 500);
}
}
【问题讨论】:
-
考虑提供一个runnable example 来证明您的问题。这将导致更少的混乱和更好的响应
-
您可能正在使用长时间运行或阻塞的代码阻塞事件调度线程;您可能没有覆盖
Player或Terrian类的getPreferredSize,导致它们以0x0的默认大小布置;你不能打电话给super.paintComponent,导致各种奇怪的绘画问题;要我继续猜吗?
标签: java swing jframe jpanel paintcomponent