Обычно вы не хотите использовать getGraphics в компоненте Java Swing, поскольку он будет нулевым, если компонент еще не визуализирован, и даже если компонент был визуализирован и возвращенный объект Graphics не является нулевым, он будетобычно это недолговечный объект, и он не будет работать должным образом, если компонент будет перекрашен (процесс, который находится вне вашего контроля).
Лучшей альтернативой является рисование в методе paintComponent JComponent и использование объекта Graphics, передаваемого в этот метод, в качестве параметра.Если вам нужно нарисовать что-то, что должно быть фоновым изображением, также посмотрите на рисунок на BufferedImage.Когда вы это сделаете, здесь будет вызывать getGraphics()
для изображения (или createGraphics()
, если вам нужен объект Graphics2D), и здесь возвращаемый объект будет стабильным.Вам все равно нужно будет как-то отобразить это изображение, либо в виде ImageIcon, отображаемого JLabel, либо в качестве изображения, отображаемого в методе paintComponent JComponent, вызвав Graphics#drawImage(....)
для параметра Graphics в paintComponent.