美文网首页
学习3 键盘控制图片移动和放大缩小

学习3 键盘控制图片移动和放大缩小

作者: Celia_QAQ | 来源:发表于2021-09-28 09:17 被阅读0次

教程来源:微信公众号、知乎,非著名程序员

缩小的时候会有点奇怪,并不是等比例缩小的样子

package resources;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Main {

      public static void main(String[] args) {
          // write your code here
          try {
              new DemoFrame();//实例化窗体
          } catch (InterruptedException e) {
              System.out.println("出现异常");
              e.printStackTrace();
          }


      }
  }
      //控制图片动起来
//首先新建Demo类,用来存放图片对象
       class Demo {
          private int x, y, width, height;
          private Image image;

          public Demo() {
              this.image = new ImageIcon("src//resources/demo.jpg").getImage();
              this.width = 100;
              this.height = 100;
          }

          public int getX() {
              return x;
          }

          public int getY() {
              return y;
          }

          public int getWidth() {
              return width;
          }

          public int getHeight() {
              return height;
          }

          public Image getImage() {
              return image;
          }

          public void setX(int x) {
              this.x = x;
          }

          public void setY(int y) {
              this.y = y;
          }
          public void setWidth(int width){
              this.width=width;
          }
          public void setHeight(int height){
              //this.width=height;//这样就是将图片旋转
              this.height=height;
          }
      }

      //不断刷新窗体
      class DemoPlane extends JPanel {
          private Demo demo;

          public DemoPlane(Demo demo) {
              this.demo = demo;
          }

          @Override
          public void paint(Graphics g) {//在paint方法中我们实例化了一个ImageIcon对象,它的参数为图片
              super.paint(g);//调用父类中被重写的方法,则必须使用关键字 super
              g.drawImage(demo.getImage(),
                      demo.getX(), demo.getY(),
                      demo.getWidth(),demo.getHeight(), null); //而图像的观察者observer 参数,传递了null值,也可以传 this 即该类为图像的观察者。
              // 当 observer 对象为非空时,原始图像更改时会通知观察者
          }
      }

      //新建demoframe类并继承JFrame,完成图片的显示
       class DemoFrame extends JFrame {

          public DemoFrame() throws InterruptedException {
              this.setTitle("Demo");//窗体标题
              this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体退出
              this.setSize(500, 500);//窗体默认宽度和高度
              //this.setVisible(true);
              // 设置显示窗体,默认为false

              //实例DemoPlane
              Demo demo = new Demo();
              DemoPlane plane = new DemoPlane(demo);
              this.add(plane);//把plane添加到窗体中
             // this.setVisible(true);
              //把打开窗体显示移动到Demo类实例化以后,防止窗体显示前,demo对象没有被加载
              //while (true) {
                //  Thread.sleep(1000);//画面每秒刷新一次
                  //demo.setX(demo.getX() + 10);
                  //demo.setY(demo.getY() + 10);
                  //plane.repaint();//画面重新绘制
              //}
              //窗口添加键盘监听
              this.setVisible(true);
              this.addKeyListener(new KeyListener() {
                  @Override
                  public void keyTyped(KeyEvent e) {
                  }

                  @Override
                  public void keyPressed(KeyEvent e) {
                        if(KeyEvent.VK_W==e.getKeyCode()){//上
                            demo.setY(demo.getY()-10);
                        }else if(KeyEvent.VK_S==e.getKeyCode()) {//下
                            demo.setY(demo.getY()+10);
                        }else if(KeyEvent.VK_A==e.getKeyCode()) {//左
                            demo.setX(demo.getX() - 10);
                        }else if(KeyEvent.VK_D==e.getKeyCode()) {//右
                            demo.setX(demo.getX() + 10);
                        }else if(KeyEvent.VK_J==e.getKeyCode()) {//放大
                            demo.setWidth(demo.getWidth() + 10);
                            demo.setHeight(demo.getWidth() + 10);//注意getwidth()
                        }else if(KeyEvent.VK_K==e.getKeyCode()) {//缩小
                            demo.setWidth(demo.getWidth() - 10);
                            demo.setHeight(demo.getWidth() - 10);//注意getwidth()
                        }
                  }

                  @Override
                  public void keyReleased(KeyEvent e) {

                  }
              });
                while(true){
                    Thread.sleep(5);//5秒刷新一次
                    plane.repaint();

                }
          }
      }

相关文章

  • 学习3 键盘控制图片移动和放大缩小

    教程来源:微信公众号、知乎,非著名程序员 缩小的时候会有点奇怪,并不是等比例缩小的样子

  • Swift Demo

    *1> 简单实现列表折叠效果 * 2. 图片的放大缩小,移动 * 3. 购买详情动画

  • 基础1

    ⒈文字:移动文字使用左最上方箭头 ⒉按住alt 切换放大镜放大缩小 ⒊Ctrl 0在图片放大缩小的情况下最快恢复到...

  • 2017-07-10

    文字:移动文字使用左最上方箭头 按住alt 切换放大镜放大缩小 Ctrl 0在图片放大缩小的情况下最快恢复到在画布...

  • canvas中图片的放大缩小和移动

    项目需求中需要图片的放大、缩小、移动,和实现一个放大缩小的缩略条。在这里记录一下实现的方法。使用了 vue 和 k...

  • 用electron实现一个批量裁剪图片的工具

    图片批量裁剪的工具 功能: 批量选择图片 放大缩小图片 移动图片 裁剪图片 导出裁剪后的图片 请在Release[...

  • PS学习1

    2020.3.21 好习惯:背景图层复制一层 放大镜:单击放大图片,按住Alt同时单击缩小图片 抓手:移动画布查看...

  • javascript案例

    1 图片的放大和缩小效果演示 1 图片的放大和缩小效果演示原理说明:图片逐渐放大和逐渐缩小是指在一定时间内图片发生...

  • 滚轮控制图片放大缩小

    1.css body{ margin: 0; background: pink; } .img...

  • ios-CropImageView-图片和裁剪框都能放大缩小移动

    特点:图片能移动,放大缩小。裁剪框能移动,自由拉伸。移动过程中裁剪框不会超出图片的范围。不在裁剪框里面会有黑色透明...

网友评论

      本文标题:学习3 键盘控制图片移动和放大缩小

      本文链接:https://www.haomeiwen.com/subject/xcxcnltx.html