图片的拖动(JPANEL)

2024-06-07 01:32
文章标签 图片 拖动 jpanel

本文主要是介绍图片的拖动(JPANEL),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PanelTest extends JPanel
{
    static int frame_width = 600;
    static int frame_height = 300;
        
    PicPanel pic = null;
    private int pic_x;
    private int pic_y;
    
    //前一个位置
    int begin_x = 0;
    int begin_y = 0;
    
    boolean inThePic = false;
    


    public PanelTest()
    {
        pic = new PicPanel("map1.jpg");
        setLayout(null);
        add(pic);
        
        pic_x = (int)((frame_width - pic.getWidth())/2);
        pic_y = (int)((frame_height - pic.getHeight())/2);
        
        pic.setLocation(pic_x, pic_y);  //定位
        
        //鼠标动作 监听器 注册
        addMouseListener(
            new MouseAdapter()
            {
                public void mousePressed(MouseEvent e)
                {
                    //检测 落点 是否在图片上,只有落点在图片上时 才起作用
                    if(inPicBounds(e.getX(), e.getY()))
                    {
                        begin_x = e.getX();
                        begin_y = e.getY();
                        inThePic = true;
                    }
                    //记录当前坐标
                }
                //释放
                public void mouseReleased(MouseEvent e)
                {
                    inThePic = false;
                }
            }
        );
        
        //鼠标移动 监听器 注册
        addMouseMotionListener(
            new MouseMotionAdapter()
            {
                public void mouseDragged(MouseEvent e)
                {
                    if(inThePic && checkPoint(e.getX(),e.getY()))
                    {
                        //边界 检查
                        pic_x =pic_x - (begin_x - e.getX());
                        pic_y =pic_y - (begin_y - e.getY());
                        //System.out.println("pic_x=" + pic_x);
                        begin_x = e.getX();
                        begin_y = e.getY();
                        pic.setLocation(pic_x, pic_y);
                    }
                }
            }
        );
    }
    //-------------帮助方法-----------------//
    //检测 点(px,py) 是否在图片上
    private boolean inPicBounds(int px,int py)
    {
        if(px >= pic_x && px <= pic_x + pic.getWidth() &&
                            py >= pic_y && py <= pic_y + pic.getHeight())
            return true;
        else
            return false;
    }
    
    //越界 检查
    private boolean checkPoint(int px, int py)
    {
        if(px <0 || py <0)
            return false;
        if(px >getWidth() || py > getHeight())
            return false;
        return true;
    }
        
    public static void main(String[] args)
    {
        JPanel jpanel = new PanelTest();
        JFrame jframe = new JFrame("图片拖动");
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.getContentPane().add(jpanel);
        jframe.setSize(frame_width, frame_height);
        jframe.setVisible(true);
    }
}
//图片面板,只是用来放置图片
class PicPanel extends JPanel
{
    int p_width = 0;
    int p_height = 0;
    Image im = null;
    
    int i = 0; //temp var
    public PicPanel(String picName)
    {
        ImageIcon imageIcon = new ImageIcon(picName);
        im = imageIcon.getImage();
        
        p_width = imageIcon.getIconWidth();
        p_height = imageIcon.getIconHeight();
        setBounds(0,0,p_width, p_height);
    }
    
    public void paint(Graphics g)
    {
        g.drawImage(im,0,0,p_width,p_height,null);
    }
}

这篇关于图片的拖动(JPANEL)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037805

相关文章

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas