Java实现的可选择及拖拽图片的面板功能【基于swing组件】
2018-01-10 12:05
1071 查看
本文实例讲述了Java实现的可选择及拖拽图片的面板功能。分享给大家供大家参考,具体如下:
今天在论坛上看到帖子希望能在 Swing 中实现像拖地图一样拖拽图片。这里是一个最简单的实现,提供了一个基本思路。
import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.io.File; /** * 在窗体上拖拽图片。使用方法:双击窗体空白处将会弹出打开图片对话框。打开图片后可以在窗体上拖拽图片。 */ @SuppressWarnings("serial") public class DragingFrame extends JFrame { /** * 构造函数 * * @throws HeadlessException ??? */ public DragingFrame() throws HeadlessException { this.setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); getContentPane().add(new ImagePanel(), BorderLayout.CENTER); } // 程序入口 public static void main(String[] args) throws Exception { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); DragingFrame frame = new DragingFrame(); frame.setSize(400, 300); frame.setLocation(300, 300); frame.setResizable(false); frame.setTitle("www.jb51.net 双击打开图片,然后拖拽"); frame.setVisible(true); } } /** * 能够拖拽图片的面板 */ @SuppressWarnings("serial") class ImagePanel extends JPanel { private DragStatus status = DragStatus.Ready; // 拖拽状态 private Image image; // 要显示的图片 private Point imagePosition = new Point(0, 0), // 图片的当前位置 imageStartposition = new Point(0, 0), // 每次拖拽开始时图片的位置(也就是上次拖拽后的位置) mouseStartposition; // 每次拖拽开始时鼠标的位置 ImagePanel() { addMouseListener(new MouseListener() { // 双击鼠标时打开图片 public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { openImage(); } } // 按下鼠标时,更改状态,并且记录拖拽起始位置。 public void mousePressed(MouseEvent e) { if (status == DragStatus.Ready) { status = DragStatus.Dragging; mouseStartposition = e.getPoint(); imageStartposition.setLocation(imagePosition.getLocation()); } } // 松开鼠标时更改状态 public void mouseReleased(MouseEvent e) { if (status == DragStatus.Dragging) { status = DragStatus.Ready; } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }); addMouseMotionListener(new MouseMotionListener() { // Java 有拖拽事件,在这个事件中移动图片位置 public void mouseDragged(MouseEvent e) { if (status == DragStatus.Dragging) { moveImage(e.getPoint()); } } public void mouseMoved(MouseEvent e) { } }); } /** * 移动图片。实际上画图工作在 paintComponent() 中进行,这里只是计算图片位置,然后调用该方法。 * * @param point 当前的鼠标位置 */ private void moveImage(Point point) { // 图片的当前位置等于图片的起始位置加上鼠标位置的偏移量。 imagePosition.setLocation( imageStartposition.getX() + (point.getX() - mouseStartposition.getX()), imageStartposition.getY() + (point.getY() - mouseStartposition.getY()) ); repaint(); } // 打开图片 private void openImage() { System.out.println("Opening image..."); File file = createFileChooser().getSelectedFile(); if (file != null) { image = Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath()); if (image != null) { this.repaint(); } } } // 创建打开文件对话框 private JFileChooser createFileChooser() { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle("请选择图片文件..."); chooser.addChoosableFileFilter(new FileNameExtensionFilter("常用图片格式", "jpg", "jpeg", "gif", "png")); chooser.showOpenDialog(this); return chooser; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { g.drawImage(image, (int) imagePosition.getX(), (int) imagePosition.getY(), this); } } private enum DragStatus { Ready, Dragging } }
运行效果:
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
您可能感兴趣的文章:
- 情人节写给女朋友Java Swing代码程序
- Java Swing组件实现进度监视功能示例
- Java编程使用卡片布局管理器示例【基于swing组件】
- Java编程使用箱式布局管理器示例【基于swing组件】
- 基于java swing实现答题系统
- Java编程swing组件JLabel详解以及使用示例
- java实现的计算器功能示例【基于swing组件】
- Java Swing 多线程加载图片(保证顺序一致)
- Java Swing实现简单的体重指数(BMI)计算器功能示例
- Java swing实现的计算器功能完整实例
- java swing实现的扫雷游戏及改进版完整示例
- Java swing框架实现的贪吃蛇游戏完整示例
- Java编程实现swing圆形按钮实例代码
- java中Swing会奔跑的线程侠
相关文章推荐
- java实现的计算器功能示例【基于swing组件】
- Java Swing组件实现进度监视功能示例
- ubuntu下基于java环境实现的视频播放功能(一)视频播放组件
- vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
- 基于jquery插件实现拖拽删除图片功能
- 基于vue-simplemde实现图片拖拽、粘贴功能
- 基于cropper.js封装vue实现在线图片裁剪组件功能
- 基于jquery的imgAreaSelect.js插件+JAVA后台实现图片裁剪保存功能
- Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
- Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
- (Java实现)HTML转JPG,TIFF等图片格式和TIFF图片合并功能解决方案。
- 基于C/S的网盘设计(JAVA) - 网盘源码-实现部分功能
- Java实现页面验证功能随机生成图片
- java实现拖拽图片
- Web开发中的验证码图片的生成-基于Java的实现
- JAVA实现图片等比缩放,图片截取功能--封装类
- Java 小例子:创建一个可拖拽图片的面板
- C#实现外部图片的拖拽到应用程序的简单功能,附全部源码,供有需要的参考
- java swing 基本实现QQ截屏功能,很简陋但有学习价值
- HTML5本地拖拽上传实现图片预览功能的实践总结