Отражение объекта в JFrame с помощью paintComponent

Я создал класс, который является "зеркальным" объектом. Конструктор класса имеет координаты зеркал и направление. В этом классе также есть метод paintComponent. Я пытаюсь создать зеркальный объект с этим классом в своем кадре и автоматически рисовать зеркало с координатами и направлением. Есть «зеркальный» класс. Могу ли я сделать это так?

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JComponent;

@SuppressWarnings("serial")
    class Mirror extends JComponent{

        public static int xm, ym;
        public static boolean direction;

        public Mirror(int xmm, int ymm, boolean directionm){

            xm=xmm;
            ym=ymm;
            direction=directionm;;
            repaint();
        }

        public int getX(){
            return xm;
        }

        public int getY(){
            return ym;
        }

        public boolean getDirection(){
            return direction;
        }

        public int getIntDirection(){
            int a;

            if(direction==true){
                a=1;
            }else{
                a=0;
            }

            return a;
        }

        public void setDirection(boolean status){
            direction=status;
        }

        @Override
        public void paintComponent(Graphics g){
            super.paintComponent(g);

            switch(getIntDirection()){
            case 0: ImageIcon mirrorr = new ImageIcon("imagess/mirrorrigt.jpg");
                    Image mirrorrImage = mirrorr.getImage();
                    g.drawImage(mirrorrImage,xm,ym,null);
                    break;
            case 1: ImageIcon mirrorl = new ImageIcon("imagess/mirrorleft.jpg");
                    Image mirrorlImage = mirrorl.getImage();
                    g.drawImage(mirrorlImage,xm,ym,null);
                    break;
            }
        }
    }

person Erman Havuç    schedule 17.03.2016    source источник
comment
Вы переопределили getX и getY, не зная, какую функциональность предоставляют эти методы. Вы также не должны загружать ресурсы (например, изображения) из метода paintComponent.   -  person MadProgrammer    schedule 17.03.2016
comment
Голосование за повторное открытие, поскольку намерение отражать содержание кажется очевидным; пожалуйста, не стесняйтесь редактировать или цитировать этот вопрос по мере развития вашего понимания.   -  person trashgod    schedule 17.03.2016


Ответы (1)


Как показано здесь, вы можете инвертировать отрисовку относительно оси, применив подходящий AffineTransform к графическому контексту. В этом примере вы можете применить scale(1.0, 1.0) слева и scale(-1.0, 1.0) справа, чтобы получить зеркальный эффект.

изображение

Box box = new Box(BoxLayout.X_AXIS);
BufferedImage image = ImageIO.read(
    new URL("http://sstatic.net/stackoverflow/img/logo.png"));
AffineTransform xfrm1 = new AffineTransform();
xfrm1.scale(1, 1);
box.add(new ImageView(image, xfrm1));
AffineTransform xfrm2 = new AffineTransform();
xfrm2.scale(-1, 1);
box.add(new ImageView(image, xfrm2));
person trashgod    schedule 17.03.2016
comment
Добро пожаловать; щелкните и перетащите панель, чтобы увидеть эффект. - person trashgod; 17.03.2016