java - JPanel 不显示

标签 java swing jpanel

我有一个应该启动游戏的类(使用 main()),以及游戏的打开屏幕。具有 main() 的类(名为 Starter)扩展了 JFrame,创建了一个新的 OpeningScreen 类(扩展JPanel),并将其添加到 JFrame 中。

由于某种原因,OpeningScreen 不会添加到 JFrame 中。代码:

入门类(class):

import javax.swing.*;
import java.awt.*;

public class Starter extends JFrame {

    public Starter(){

        setSize(500,500);
        setResizable(false);
        setTitle("Ping-Pong Battle");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        OpeningScreen openingS = new OpeningScreen();
        add(openingS);

        setVisible(true);

    }

    public static void main(String[]args){
        Starter starter = new Starter();
    }

}

OpeningScreen 类:

import javax.swing.*;

import java.awt.event.*;
import java.awt.*;

public class OpeningScreen extends JPanel {

    public OpeningScreen(){
        setBackground(Color.BLACK);
        setFocusable(true);
            setVisible(true);
    }

    public void paint(Graphics g){

        // Soon code here to be drawn.

    }

    public void startGame(){
        Board board = new Board();
    }

}

有什么问题吗?谢谢

编辑:OpeningScreen 的构造函数确实运行,但不会将背景绘制为黑色。另外,尝试在 Paint() 中绘制东西是行不通的。

最佳答案

您的问题是由于重写 OpeningScreen 类中的 paint 引起的。背景没有被绘制,因为你从来没有绘制过它!调用 super.paint(g) 来解决这个问题。

但是,是generally recommended to use paintComponent() instead of paint().只需将代码移至 paintComponent 即可。

此方法正确绘制黑色背景的红色正方形:

@Override
public void paintComponent(Graphics g){

    super.paintComponent(g);
    g.fillRect(100, 100, 100, 100);
}

关于java - JPanel 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830382/

相关文章:

java - 为 Java GUI 选择布局管理器和面板数量

Java:需要一些关于代码重用的建议

java - 为 JDO 实体选择某个 "column"

java - 没有下拉列表的 JComboBox 的替代方案

java - 为什么BufferedImage没有按照paintComponent方法中绘制的矩形进行切割(其高度计算错误)?

java - JPanel 字体与打印输出不匹配

java - 更改 Java GUI 应用程序中内容的正确方法(不是每次都创建一个新窗口)?

java - 时区更改JAVA

java - JPanel 没有显示它的其余部分

java - jmathplot 在 swing 应用程序中不起作用