Вопрос по порядку рисования в Swing
Есть swing компонент(JComponent), который содержит другие. Сначала рисуется(paintComponent) он сам, потом его дети. Родительский компонент это что-то вроде холста. Мне понадобилось реализоваь выделение детей. То есть при клике на обьекте вокруг него рисуется рамка. Можно было бы сделать что каждый обьект рисует свою рамку сам, но тут возникает проблема - нельзя рисовать вне своего графического контекста, анужно нарисовать рамку как раз вне его. Возможные решения:
- фактический размер каждого обьекта немного больше его заданного. В этой разнице и рисуется рамка. Проблема что тогда каждый раз придется учитыватъ это несоответсвие.
- добавить обьект размером с главный в самый конец иерархии, что то вроде стекла которое кладется поверх всего и на нем рисуются все рамки. Плохо то что в иерархии компонентов будет такой обьект, который не имеет отношения к логике приложения, а порсто является деталью реализации. Причем каждый раз при пробеге по массиву всех компонентов, придется его учитывать, а не хотелось бы.
- рисовать рамки в корневом обьекте. Все бы хорошо, но он рисуется первым и рамки могут быть затерты компонентами нарисованными поверх. Вот еслиб как-то так: рисуется корневой, ресуются все дочернии, корневой рисует поверх рамки - этоб было то что нужно, но я не понимаю как-ток сделатъ. Есть в swing возможность рисовать после прорисовки всех дочерних компонентов? Я думал это как-то связано с
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
но похоже что нет.Есть ли возможность у компонента нарисовать себя еще раз после прорисовки своих детей?
- фактический размер каждого обьекта немного больше его заданного. В этой разнице и рисуется рамка. Проблема что тогда каждый раз придется учитыватъ это несоответсвие.
- добавить обьект размером с главный в самый конец иерархии, что то вроде стекла которое кладется поверх всего и на нем рисуются все рамки. Плохо то что в иерархии компонентов будет такой обьект, который не имеет отношения к логике приложения, а порсто является деталью реализации. Причем каждый раз при пробеге по массиву всех компонентов, придется его учитывать, а не хотелось бы.
- рисовать рамки в корневом обьекте. Все бы хорошо, но он рисуется первым и рамки могут быть затерты компонентами нарисованными поверх. Вот еслиб как-то так: рисуется корневой, ресуются все дочернии, корневой рисует поверх рамки - этоб было то что нужно, но я не понимаю как-ток сделатъ. Есть в swing возможность рисовать после прорисовки всех дочерних компонентов? Я думал это как-то связано с
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
но похоже что нет.Есть ли возможность у компонента нарисовать себя еще раз после прорисовки своих детей?
