且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

后覆盖在Java组件的paint方法

更新时间:2023-12-05 18:12:04


  

所以basicaly我想那是什么我throught成品的配件我说的清单:你们(组件),这是在列表中会受到某些角度旋转。


块引用>

如果你想使用,那么你需要做的风俗画中的paintComponent()方法的面板作为一个单一的所有组件上的旋转盘,因此

如果要旋转,例如,每个人都有的旋转角度不同单个图像,那么你可以再次做到这一点在的paintComponent(...)方法和改变角度为每个组件

或者,在第二种情况下,你可以使用旋转图标类。在这种情况下,图标是刚添加到JLabel。然后,您可以更改度的旋转和重绘的标签,所以没有风俗画(除了在图标本身)。

In java awt or swing when you want to change painting of some component you usually have to override the method paint(Graphics g) (in awt) or paintComponent(Graphics g) (in swing).
This is usually (maybe allways - I'm not sure) done when you are creating the component for example:

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
                }   

            }; 

Imagine that you have container of components which could for example consists of some JLabels, some JTextFields, some image. Which will be all put on one component. By container I mean you have some list or map with ids or some similar structure in which are all components you will put on one JFrame.
The question is if I can change the painting method after creating with all of the components which are in this list in the moment when all of them are already created. For example I want do the rotation action (rotate), which is defined in Graphisc2D, with all of them.
So basicaly what I want is that I throught the list of componets I have and say: "All of you (components) which are in the list will be rotated by some angle". Is that possible? If yes how?

Edit:
This is my not correctly working solution:

  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);

So basicaly what I want is that I throught the list of componets I have and say: "All of you (components) which are in the list will be rotated by some angle".

If you want to rotate panel and therefore all the components on the panel as a single using then you need to do the custom painting in the paintComponent() method.

If you want to rotate, for example, individual images that each have a different angle of rotation then you can again do this in the paintComponent(...) method and change the angle for each component.

Or, in this second case you can use the Rotated Icon class. In this case the Icon is just added to a JLabel. Then you can change the degrees of rotation and repaint the label, so there is no custom painting (except in the Icon itself).