Java(重新)绘画机制

时间:2015-12-16 14:01:41

标签: java swing rotation paintcomponent repaint

此代码应该旋转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°。他的头将向下,他的右臂将在你的左侧,他的左臂将在你的右侧。所以在这个metaphore图片中是JFrame和JFrame上的组件是man。因此,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);

如果在行frame.setContentPane(面板)之后添加了点 5 ,它最终会以某种方式 FORCE java来完成它的工作并重新绘制JFrame,所以它根据我的需要旋转。

问题是当contentPane上的某些组件的内容被更改时,它再次在旋转版本上绘制未旋转。所以,如果我使用我的定义中的metaphore。 “180°旋转的左手改变的左手应该在右侧重新绘制,但是它在左侧绘制,就像不旋转一样”。只是。如果我不进行旋转,那么更新的组件将绘制在它们所在的位置,而不是旋转。
问题: 任何人都可以解释一下(重新)绘画生命周期是如何工作的?或者只是 我所缺少的重绘(或者基本上我的尝试1-4)不会强迫java重新绘制它,但JFrame上的添加组件是(尝试5)?
错误更新组件的事实在我的问题上是一个巨大的痛苦,但它不是这个问题的主要观点。这里只是为了完成实际行为的描述。


我已经阅读了关于绘画的文档以及关于它的许多主题和问题,但我没有找到任何有用的信息。

0 个答案:

没有答案