Я пишу игру на основе тетриса и использую GridLayout для отображения фактического вала, на который падают фигуры тетриса.GridLayout заполнен небольшими объектами JLabel.Шахта сама по себе является JPanel внутри другой JPanel, панели, которую я использую, чтобы содержать и контролировать всю игру.Когда игра закончится, я хочу, чтобы в верхней части сетки появилось слово «ИГРА НАД», возможно, сопровождаемое небольшим изображением.
Мой вал - это экземпляр ShaftPanel, который расширяет JPanel (чтобы я мог переопределить paintComponent) и является вложенным закрытым классом (поэтому он имеет доступ к частным переменным экземпляра большего JPanel).Закрытая переменная экземпляра, к которой он должен получить доступ, является логической игрой, которая имеет значение true, когда игра находится в сеансе, и имеет значение false, когда игра заканчивается.Вот код для моего класса ShaftPanel:
public class ShaftPanel extends JPanel {
public ShaftPanel(GridLayout g){
super(g);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(game)
return;
g.setColor(Color.WHITE);
g.setFont(new Font("Courier New", Font.BOLD, 15));
char[] c = {'G','A','M','E',' ','O','V','E','R'};
g.drawChars(c,0,c.length,45,45);
}
}
У меня есть один метод в более крупном классе, вызывающий метод Repaint () вала в соответствующее время.Добавление оператора print указывает, что метод paintComponent вызывается, когда я этого хочу, и что методы setColor, setFont, drawChars вызываются в правильное время.Однако ничего не появляется.Я очень подозреваю, что текст рисуется под сеткой JLabels, поэтому его невозможно увидеть, но я не знаю, как решить эту проблему.JLabels внутри сетки должны оставаться непрозрачными, потому что программа полагается, что они имеют разные цвета.Есть ли способ заставить paintComponent рисовать текст поверх чего-либо еще на панели?