Чтобы получить некоторую справочную информацию, которая может помочь, я создаю понг игры и решил добавить меню escape / pause (когда вы нажимаете escape на клавиатуре, появляется меню с некоторыми настройками), я огляделся и нашел что лучший способ сделать это - использовать JLayeredPane и добавить еще одну JPanel сверху. Однако, когда я добавил свой класс «живописец» в JLayeredPane, метод paint (Graphics g) перестал вызываться (он работал нормально, когда я только добавил его в JFrame).
import javax.swing.*;
public class Game extends JFrame {
public static Painter painter;
public Game() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLayeredPane lp = getLayeredPane();
painter = new Painter();
add(lp);
}
public static void main(String[] args) {
Game frame = new Game();
frame.setVisible(true);
painter.repaint();
}
}
А вот и мой класс Художника
import java.awt.*;
import javax.swing.*;
public class Painter extends JPanel {
public void paint(Graphics g) {
System.out.println("Working");
super.paint(g);
}
}
Вместо add(lp);
я первоначально попытался lp.add(painter);
, и в этом случае метод рисования никогда не вызывался. Делая add(lp)
, я получаю исключение IllegalArgumentException для добавления родительского элемента контейнера к себе.