Я не могу сказать, почему не отображается JLabel - PullRequest
0 голосов
/ 10 июля 2020

У меня есть основной класс, который создает экземпляр JFrame и JPanel, и я установил JPanel как publi c, чтобы я мог получить к нему доступ из другого класса, чтобы добавить в него больше вещей (я не Не знаю, так ли это работает, это просто мой лог c).

public class Main {

   private JFrame obj; 
   public Gameplay gamePlay; 

   public Main() {
      obj = new JFrame();
      gamePlay = new Gameplay();
   }

   public void execute() {
      //properties of the jframe
      obj.setBounds(10, 10, 700, 600);
      obj.setTitle("Brick breaker");
      obj.setResizable(false);
      obj.setVisible(true);
      obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //add the jpanel inside the jframe
      obj.add(gamePlay);
   }

   public static void main(String[] args) {
      Main main = new Main();
      main.execute();
   }
}

Затем у меня есть другой класс с именем Gameplay, который расширяет JPanel. Один из методов внутри JPanel должен рисовать объекты внутри JPanel и добавлять метку, когда условие истинно.

Обратите внимание, что закомментированная область в конце, где «ИГРА ЗАВЕРШЕНА» нарисована с графикой 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();
}

1 Ответ

0 голосов
/ 16 июля 2020

Вам необходимо добавить эту строку в свой код:

lblGameOver.setOpaque (true); Он добавит ваш BackGroud и заставит этот метод работать хорошо lblGameOver.setForeground (Color.green);

...