Любая альтернатива вызову getGraphics (), который возвращает ноль - PullRequest
6 голосов
/ 18 ноября 2011

Часто, когда я вызываю getGraphics (), он возвращает null, даже если я установил xxx.getGraphics (); ххх быть видимым (как показывает поиск Google ...)

Но это не работает, и это расстраивает меня, так как это легко и просто сделать в C-Sharp.

Кто-нибудь знает лучший способ сделать это вместо использования getGraphics () ??

Ответы [ 2 ]

12 голосов
/ 18 ноября 2011

Не используйте getGraphics (). Любая нарисованная вами картина будет временной и будет потеряна в следующий раз, когда Swing определит, что компонент необходимо перекрасить.

Вместо этого переопределите paintComponent() метод JComponent или JPanel, чтобы сделать вашу собственную картину. См. Custom Painting для более подробной информации и примеров.

11 голосов
/ 18 ноября 2011

Обычно вы не хотите использовать getGraphics в компоненте Java Swing, поскольку он будет нулевым, если компонент еще не визуализирован, и даже если компонент был визуализирован и возвращенный объект Graphics не является нулевым, он будетобычно это недолговечный объект, и он не будет работать должным образом, если компонент будет перекрашен (процесс, который находится вне вашего контроля).

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

...