Опубликовать переопределение метода рисования компонентов в Java
В java awt или swing, когда вы хотите изменить рисование какого-либо компонента, вы обычно должны переопределить метод paint (Graphics g) (в awt) или paintComponent (Graphics g) (в swing).
Обычно это делается (может быть, всегда - я не уверен), когда вы создаете компонент, например:
JPanel jPanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
//... my implementation of paint, some transfromations, rotation, etc
}
};
Представьте, что у вас есть контейнер компонентов, который может, например, состоять из нескольких JLabels, некоторых JTextFields, некоторого изображения. Который будет все положен на один компонент. Под контейнером я подразумеваю, что у вас есть какой-то список или карта с идентификаторами или похожей структурой, в которой все компоненты вы поместите в один JFrame.
Вопрос в том, смогу ли я изменить метод рисования после создания со всеми компонентами, которые есть в этом списке, в тот момент, когда все они уже созданы. Например, я хочу выполнить действие поворота (поворот), которое определено в Graphisc2D, со всеми из них.
В общем, я хочу, чтобы я просмотрел список имеющихся у меня компонентов и сказал: «Все вы (компоненты), находящиеся в списке, будут повернуты на некоторый угол». Это возможно? Если да, то как?
Редактировать:
Это мое не правильно работающее решение:
graphicalDisplayPanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g2d = (Graphics2D) g;
g2d.rotate(Math.PI, anchorx, anchory);
}
@Override
public void paintChildren(Graphics g) {
super.paintChildren(g);
Graphics2D g2d2 = (Graphics2D) g;
g2d2.rotate(Math.PI, anchorx, anchory);
}
};
JFrame jFrame = JFrame();
// ... setting dimension, position, visible etc for JFrame, it works correctly nonrotated
jFrame.setContentPane(graphicalDisplayPanel);