Java 如何将多个类添加到单个JFrame?
因此,我尝试使用JPanel“panel”将多个类添加到我的JFrame“frame”中,但似乎没有任何效果。这是我的主要课程:Java 如何将多个类添加到单个JFrame?,java,swing,jframe,jpanel,paintcomponent,Java,Swing,Jframe,Jpanel,Paintcomponent,因此,我尝试使用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();
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方法,因此不会渲染任何其他内容。这个代码有什么问题吗?谢谢
编辑:以下是我的玩家和地形等级:
玩家:
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);
}
}
Player
和Terrain
的getPreferredSize
,导致它们以默认大小0x0
super.paintComponent
,这可能会导致无休止的绘制问题和工件,从而破坏了绘制链Terrain
中的Player
参考与屏幕上的参考无关请查看,有关更多详细信息,请考虑提供一个演示您的问题的示例。这将减少混乱和更好的响应。您可以使用长时间运行或阻塞代码阻塞事件调度线程;您可能没有覆盖
Player
或Terrian
类的getPreferredSize
,导致它们以默认大小0x0
布局;您无法调用super.paintComponent,导致各种奇怪的绘制问题;你想让我继续猜测吗?地形中玩家的引用实际上是我之前研究的东西的产物p再次感谢您提供的信息。我已经添加了super.paintComponent并覆盖了GetPreferedSize,以匹配我在播放器和地形中的窗口大小。但是现在只有我在Frame.java中添加到JPanel中的第一个类(在本例中是Player)被呈现。是的,通常使用FlowLayout,它们被并排添加(尝试在帧上调用pack而不是setSize),相反,尝试将Player添加到地形中。顺便说一句,我通常会避免基于组件的实体,而是设计一个概念,如果某个东西是可绘制的,并将它们全部绘制在一个组件中,这就是我最终要做的,是的。或者类似的。我希望如此。