我有一个应该启动游戏的类(使用 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/