Java (пере) механизм рисования

Этот код должен делать поворот JFrame на 180°. Это так или иначе делает, если некоторые условия выполнены. Но... Давайте посмотрим на это:

    //anchorx,anchory are center points of screen (JFrame)
    JPanel panel = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {

                super.paintComponent(g);
                //super.paintChildren(g); // this shouldn't be here
                //but the behaviour is same if i deleted this line

                Graphics2D g2d = (Graphics2D) g;
                g2d.rotate(Math.PI, anchorx, anchory);



            }
       /*
       /* //I also commented this whole overiding paintChildren and 
       //the behaviour is still same like i described.
       @Override
              public void paintChildren(Graphics g) {
                   super.paintChildren(g);
                   Graphics2D g2d2 = (Graphics2D) g;

                g2d2.rotate(Math.PI, anchorx, anchory);

              }*/

        };

  JFrame frame = new JFrame();
  frame.setContentPane(panel);

ОПРЕДЕЛЕНИЕ (чтобы избежать недоразумений): вращение, поворот JFrame = представьте, что JFrame - это картинка или фотография, и вы не можете прикоснуться к нему и буквально повернуть его вокруг его центра. Так что составляющие его тоже вращаются. Итак, на картинке изображен человек, а вы поворачиваете картинку на 180°. Его голова будет опущена, его правая рука будет на вашей левой стороне, его левая рука будет на вашей правой стороне. Таким образом, на этой метафоре изображен JFrame, а компоненты на JFrame - это человек. Таким образом, вращение JFrame означает вращение целого как одной единицы со всеми ее компонентами. Вышеприведенный код просто рисует необращенный JFrame.

Таким образом, приведенный выше код должен вращать JFrame, но ничего не происходит.
Есть несколько вариантов, которые я пробовал, но ничего не изменилось. (Конечно, после настройки панели содержимого).
1) перекрасить:

frame.repaint();

2) проверить и перекрасить:

 frame.repaint();

3) попробуем тоже на contentPane:

frame.getContentPane().repaint();

4) - || -:

frame.getContentPane().validate();
frame.getContentPane().repaint();

Попытки 1 - 4 не заставили Java по-настоящему "перекрасить" JFrame и повернуть его.

5) Так что я только что попробовал это:

JLabel hwLabel = new JLabel("Hello world.");
hwLabel.setVisible(true);
frame.getContentPane().add(hwLabel);

Если точка 5 добавлена ​​после строки frame.setContentPane(панель), она каким-то образом, наконец, заставит Java выполнить свою работу и перекрасить JFrame, поэтому он поворачивается так, как я хочу.

Проблема в том, что при изменении содержимого какого-либо компонента в contentPane он снова отображается без поворота над повернутой версией. Так что, если я использую свой метафора из определения. "Измененная левая рука человека, повернутого на 180 °, должна быть перерисована с правой стороны, но она нарисована на левой стороне, как не повернутая". Просто. Обновленные компоненты нарисованы на том месте, где они были бы, если бы я не делал поворотов, конечно же, не поворачивал.
ВОПРОС:Может ли кто-нибудь объяснить мне, как (пере) живопись жизненного цикла работает? Или, может быть, только то, что мне не хватает, это перерисовка (или, в основном, мои попытки 1-4), не заставляет java перерисовывать его, а добавляет компонент на JFrame yes (попытка 5)?
Неправильное обновление компонента - большая боль в моем а **, но это не главное в этом вопросе. Это здесь только для завершения описания фактического поведения.


Я прочитал документацию по живописи и много тем и вопросов о ней, но я не нашел ничего полезного.

0 ответов

Другие вопросы по тегам