gpt4 book ai didi

java - 如何向单个 JFrame 添加多个类?

转载 作者:行者123 更新时间:2023-12-02 05:00:55 26 4
gpt4 key购买 nike

所以我尝试使用 JPanel“面板”将多个类添加到我的 JFrame“框架”中,但它似乎没有任何效果。这是我的主要类(class):

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

最佳答案

  1. 您未能覆盖 PlayerTerraingetPreferredSize,导致它们以默认大小 布局0x0
  2. 您没有调用 super.paintComponent,从而破坏了绘制链,这可能会导致无休止的绘制问题和伪影
  3. TerrainPlayer的引用与屏幕上的引用无关

看看Laying Out Components Within a Container , Painting in AWT and SwingPerforming Custom Painting了解更多详情

关于java - 如何向单个 JFrame 添加多个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28290768/

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