KeleQAQ 2019-11-06 23:24 采纳率: 0%
浏览 422

JAVA怎么让图片翻转?

我想点击按钮就让图片翻转。可是只能翻转一次是怎么回事////


这里点按钮只能翻转一次,然后再点就不变了

图片说明

代码



public class My4 extends JFrame{

    public My4() {

        setVisible(true);
        setBounds(0, 100, 500, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("图像翻转");
        add(new MyPanels());
        validate();
    }
    //-------------------------------------------------------------
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new My4();
    }

}

class MyPanels extends JPanel implements ActionListener{
    private int w;//图片长度
    private int h;//图片宽

    BufferedImage image;
    JButton button1;
    Graphics2D g2;
    boolean change=false;

    public MyPanels() {

        button1=new JButton("翻转");
        add(button1);
        button1.addActionListener(this);

        try {
            image=ImageIO.read(new File("D:\\素材\\恐龙1.png"));
            w=image.getWidth();
            h=image.getHeight();

        } catch (IOException e) {

            e.printStackTrace();
        }
    }
    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        int t=1;
        super.paint(g);
        g2=(Graphics2D) g;


        if(!change) {
            g2.drawImage(image, 30, 30, w, h, this);
        }
        //shx:水平方向的倾斜量; shy:垂直方向的倾斜量。
        //p.shear(0.3, 0);
        //g2.drawImage(image, p, this);

        //图像向X轴移动10px,Y轴移动50px
        //tr.translate(40, 50);
        //旋转30度
        //tr.rotate(30*3.14159/180);


        //System.out.println(change);
        else {
        //是这里有问题吗

            System.out.println("改");
            AffineTransform p = new AffineTransform();
            p.scale(-1,1);     //向反反向缩放-1
            p.translate(-(w+60), 0);
            g2.setTransform(p);
            g2.drawImage(image, 30, 30, w, h, this);

        }

    }
    //实现接口
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==button1) {
            change=true;
            repaint();

        }

    }


}


  • 写回答

1条回答

  • 毕小宝 博客专家认证 2019-11-07 09:20
    关注

    用一个 isCanRotate =true 表示,点击事件中根据该标识判断是否需要翻转,第一次触发翻转后修正标识为 flase ,以后就不再翻转》

    if(isCanRotate){
      //翻转
        isCanRotate = false;
    }else{
      //不翻转
        return;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题