Некоторые пользователи нашего приложения Swing сообщают о странных артефактах, появляющихся на дисплее. Это варьируется от компонентов, не перекрашивающих себя должным образом в течение секунды или двух, вплоть до целых частей приложения, перекрашиваемых в виде плиточных обоев по областям окна.
Приложение было разработано разработчиками всех уровней, от опытных ребят из Java до молодых парней прямо из университета, в течение пяти лет или около того, и, как и следовало ожидать, часть кода AWT - беспорядок , Теперь передо мной стоит задача исправить как можно больше зла в течение следующих нескольких месяцев или около того.
С этим легко разобраться. Работа с компонентами только в потоке диспетчеризации событий, асинхронный ввод-вывод, вроде бы, и я надеюсь, что сообщение будет передано остальной команде.
То, что я хотел бы знать, это лучший способ работы с контекстами Graphics, особенно в контексте paintComponent (). Я вижу много ...
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g;
// ...Whole lotta drawing code...
}
Лучше ли это делать?
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g.create();
// ...Whole lotta drawing code...
gfx.dispose();
}
Если параметр g будет повторно использоваться в других красках, то мне не нужно восстанавливать его в хорошем состоянии, отменять AffineTransforms и т. Д .?