Java 我能';我说不出为什么杰拉贝尔没有露面

Java 我能';我说不出为什么杰拉贝尔没有露面,java,swing,jlabel,Java,Swing,Jlabel,我有一个主类,它创建了JFrame和JPanel的实例,我将JPanel设置为public,这样我就可以从另一个类访问它,向其中添加更多内容(我不知道它是否是这样工作的,这只是我的逻辑) 然后,我有另一个名为Gameplay的类,它扩展了JPanel。其中一个方法必须在JPanel中绘制内容,并在条件为true时添加标签 请注意,“游戏结束”末尾的注释区域是由图形g绘制的,它确实可以正常工作,但我想放置一个标签,因为我想使用自定义字体。标签永远不会出现。方法pait()必须绘制的所有其他内容也可

我有一个主类,它创建了
JFrame
JPanel
的实例,我将
JPanel
设置为public,这样我就可以从另一个类访问它,向其中添加更多内容(我不知道它是否是这样工作的,这只是我的逻辑)

然后,我有另一个名为
Gameplay
的类,它扩展了
JPanel
。其中一个方法必须在JPanel中绘制内容,并在条件为true时添加标签

请注意,“游戏结束”末尾的注释区域是由图形
g
绘制的,它确实可以正常工作,但我想放置一个标签,因为我想使用自定义字体。标签永远不会出现。方法
pait()
必须绘制的所有其他内容也可以正常工作

public void paint(Graphics g) {
    //background
    g.setColor(Color.black);
    g.fillRect(1, 1, 692, 592);
    
    //more code of drawing things
    //...
    
    if(ballposY > 570) {
        play = false;
        ballXdir = 0;
        ballYdir = 0;
        
        lblGameOver = new JLabel("GAME OVER");
        lblGameOver.setForeground(Color.green);
        lblGameOver.setFont(pixels);//custom font
        Main main = new Main();
        main.gamePlay.add(lblGameOver);

        //g.setColor(Color.green);
        //g.setFont(new Font("serif", Font.BOLD, 30));
        //g.drawString("GAME OVER", 250, 300);
    }
    g.dispose();
}

您需要将此行添加到代码中:

lblGameOver.setOpaque(true); 这将增加你的背景,使该方法工作良好 lblGameOver.setForeground(颜色:绿色)


您正在
paint()
方法中创建一个新的
Main
对象,并在其中设置标签。但这从未显示过。那可能不是你想做的。假设您真正想做的是在实际的游戏面板中显示颜色,它只是
这个。添加(lblGameOver)
而不是创建新
Main
并添加标签的两行。@maloomeister感谢您的反馈,但标签仍然没有显示。不要在绘画中添加组件,因为那时你必须重新绘制,这将再次添加组件。此外,您正在覆盖绘制,并且在绘制方法中没有任何地方可以绘制组件。覆盖
paintComponent
而不是
paint
。如果您仍然有问题,请在实施所有建议后发布一个正确的演示。另一个注意事项:
obj.setVisible(true)。。对象添加(游戏性)的顺序应相反。只有在添加了所有组件后,才可以将GUI设置为可见&
pack()
。可以在GUI可见后添加组件,但必须采取特殊措施&这种方法通常是“错误问题的正确答案”。
public void paint(Graphics g) {
    //background
    g.setColor(Color.black);
    g.fillRect(1, 1, 692, 592);
    
    //more code of drawing things
    //...
    
    if(ballposY > 570) {
        play = false;
        ballXdir = 0;
        ballYdir = 0;
        
        lblGameOver = new JLabel("GAME OVER");
        lblGameOver.setForeground(Color.green);
        lblGameOver.setFont(pixels);//custom font
        Main main = new Main();
        main.gamePlay.add(lblGameOver);

        //g.setColor(Color.green);
        //g.setFont(new Font("serif", Font.BOLD, 30));
        //g.drawString("GAME OVER", 250, 300);
    }
    g.dispose();
}