Java 如何将多个类添加到单个JFrame?

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();

因此,我尝试使用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方法,因此不会渲染任何其他内容。这个代码有什么问题吗?谢谢

编辑:以下是我的玩家和地形等级:

玩家:

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添加到地形中。顺便说一句,我通常会避免基于组件的实体,而是设计一个概念,如果某个东西是可绘制的,并将它们全部绘制在一个组件中,这就是我最终要做的,是的。或者类似的。我希望如此。