Java 杰帕内尔元';t显示

Java 杰帕内尔元';t显示,java,swing,jpanel,Java,Swing,Jpanel,我有一个类,它应该启动一个游戏(使用main()),以及游戏的开始屏幕。带有main()(名为Starter)的类扩展了JFrame,创建了一个新的OpeningScreen类(扩展JPanel),并将其添加到JFrame中 由于某些原因,OpeningScreen不会添加到JFrame。代码: 起动机等级: import javax.swing.*; import java.awt.*; public class Starter extends JFrame { public St

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

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

起动机
等级:

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

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

}
打开屏幕
课程:

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

}
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()中绘制对象也不起作用。

我认为,因为您覆盖了paint(),所以背景不会被绘制,所以看起来好像没有添加面板。对绘画方法进行注释会使窗口变黑。

另外,绘画方法对我来说也很有效,也许你的颜色设置为黑色,所以它不会显示在黑色背景上?在绘图之前,请尝试使用g.setColor(Color.white)。

我认为,因为您覆盖了paint(),所以背景没有被绘制,所以看起来好像没有添加面板。对绘画方法进行注释会使窗口变黑。

另外,绘画方法对我来说也很有效,也许你的颜色设置为黑色,所以它不会显示在黑色背景上?在绘图之前,请尝试使用g.setColor(Color.white)。

您的问题源于在
打开屏幕
类中重写
绘制
。没有绘制背景,因为您从未绘制过背景!调用
super.paint(g)
修复此问题

但是,只需将代码移动到
paintComponent

此方法正确地将黑色背景绘制为红色正方形:

@Override
public void paintComponent(Graphics g){

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

您的问题源于覆盖
打开屏幕
类中的
绘制
。没有绘制背景,因为您从未绘制过背景!调用
super.paint(g)
修复此问题

但是,只需将代码移动到
paintComponent

此方法正确地将黑色背景绘制为红色正方形:

@Override
public void paintComponent(Graphics g){

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

尝试覆盖
paintComponent(Graphics g)
而不是
paint(Graphics g)
nope,同样的问题:\n尝试覆盖
paintComponent(Graphics g)
而不是
paint(Graphics g)
nope,同样的问题:\n我注释掉了paint()方法,它成功了(黑色背景)。但是现在我想在面板中绘制,我需要再次添加paint()方法,然后出现同样的问题。知道如何解决这个问题吗?在做其他事情之前,尝试在paint方法中添加super.paint(g)。@Josh看到我的答案了吗。两者都可以。我注释掉了paint()方法,它成功了(黑色背景)。但是现在我想在面板中绘制,我需要再次添加paint()方法,然后出现同样的问题。知道如何解决这个问题吗?在做其他事情之前,尝试在paint方法中添加super.paint(g)。@Josh看到我的答案了吗。两者都可以。好吧,忘了超级油漆(g)。非常感谢:)通常是覆盖
paintComponent
而不是
paint
作为执行自定义绘制的首选方式……好吧,忘了super.paint(g)。非常感谢:)它通常是覆盖
paintComponent
而不是
paint
作为执行自定义绘制的首选方式。。。