Java--图片浏览器

功能:启动后选择打开文件,可以打开图片进行浏览。

v 1.0 :支持上一张 下一张功能。(欠缺,窗口大小未随着图片大小而改变)

  1 import java.awt.BorderLayout;
  2 import java.awt.EventQueue;
  3 import java.awt.event.ActionEvent;
  4 import java.awt.event.ActionListener;
  5 import java.io.File;
  6 import java.io.IOException;
  7
  8 import javax.imageio.ImageIO;
  9 import javax.swing.ImageIcon;
 10 import javax.swing.JButton;
 11 import javax.swing.JFileChooser;
 12 import javax.swing.JFrame;
 13 import javax.swing.JLabel;
 14 import javax.swing.JMenu;
 15 import javax.swing.JMenuBar;
 16 import javax.swing.JMenuItem;
 17 import javax.swing.JOptionPane;
 18 import javax.swing.JToolBar;
 19
 20 public class TestMenu extends JFrame {
 21     private JToolBar toolBar = new JToolBar();
 22     private JButton up = new JButton("up");
 23     private JButton down = new JButton("down");
 24     private JLabel label;
 25     private JFileChooser chooser;
 26     private static String[] currentPath = new String[10000];// 最多一万张图片
 27     private static int dirPhotoCount = 0;
 28     private static boolean flag = false; //user yes or not open dir
 29
 30     public static void getFileNameToFullPhotoArray(String dirPath) {
 31         String path = dirPath;
 32         File f = new File(path);
 33         if (!f.exists()) {
 34             System.out.println(path + " not exists");
 35             return;
 36         }
 37         int cut = 0;
 38         File fa[] = f.listFiles();
 39         for (int i = 0; i < fa.length; i++) {
 40             File fs = fa[i];
 41             try {
 42                 if (ImageIO.read(fs) != null) { // Yes or not photo style file.
 43                     currentPath[cut++] = dirPath + "\\" + fs.getName();
 44                 }
 45             } catch (IOException ex) {
 46
 47             }
 48         }
 49         dirPhotoCount = cut;
 50     }
 51
 52     public TestMenu() {
 53         super();
 54         setTitle("PHOTO viewer");
 55         getContentPane().add(toolBar, BorderLayout.NORTH);
 56         label = new JLabel();
 57         this.chooser = new JFileChooser();// java provide file selected
 58         chooser.setCurrentDirectory(new File("."));// view path
 59
 60         JMenuBar jmb = new JMenuBar();
 61         setJMenuBar(jmb);
 62         JMenu fileMenu = new JMenu("File");
 63         JMenuItem jmiExit = new JMenuItem("Exit");
 64         JMenuItem jmiOpen = new JMenuItem("Open");
 65         jmb.add(fileMenu);
 66         toolBar.add(up);
 67         toolBar.add(down);
 68         getContentPane().add(toolBar, BorderLayout.NORTH);
 69         add(label);
 70         jmb.add(fileMenu);
 71         fileMenu.add(jmiOpen);
 72         fileMenu.add(jmiExit);
 73
 74         up.addActionListener(new ActionListener() {
 75             public void actionPerformed(ActionEvent e) {
 76
 77                 if (flag) {
 78                     String dir = chooser.getSelectedFile().getParent();
 79                     getFileNameToFullPhotoArray(dir);// current dir build photo array
 80                     String currentImage = label.getIcon().toString();
 81                     for (int i = 0; i < dirPhotoCount; i++) {
 82                         if (currentPath[i].equals(currentImage)) {
 83                             label.setIcon(new ImageIcon(currentPath[i == 0 ? dirPhotoCount - 1 : i - 1]));
 84                             break;
 85                         }
 86                     }
 87                 } else {
 88                     JOptionPane.showMessageDialog(null, "当前无图片,请选择正确文件", "打开失败", JOptionPane.ERROR_MESSAGE);
 89
 90                 }
 91             }
 92
 93         });
 94         down.addActionListener(new ActionListener() {
 95             public void actionPerformed(ActionEvent e) {
 96
 97                 if (flag) {
 98                     String dir = chooser.getSelectedFile().getParent();
 99                     getFileNameToFullPhotoArray(dir);// 对当前目录建立图片数组
100                     String currentImage = label.getIcon().toString();
101                     for (int i = 0; i < dirPhotoCount; i++) {
102                         if (currentPath[i].equals(currentImage)) {
103                             label.setIcon(new ImageIcon(currentPath[i == dirPhotoCount - 1 ? 0 : i + 1]));
104                             break;
105                         }
106                     }
107                 } else {
108
109                     JOptionPane.showMessageDialog(null, "当前无图片,请选择正确文件", "打开失败", JOptionPane.ERROR_MESSAGE);
110
111                 }
112             }
113
114         });
115
116         jmiOpen.addActionListener(new ActionListener() {
117             public void actionPerformed(ActionEvent e) {
118                 int result = chooser.showOpenDialog(null);
119                 if (result == JFileChooser.APPROVE_OPTION) {
120                     try {
121                         if (ImageIO.read(chooser.getSelectedFile()) != null) { // 判断是否是图片文件
122                             flag = true;
123                             String name = chooser.getSelectedFile().getPath();
124                             label.setIcon(new ImageIcon(name));
125                         } else {
126                             JOptionPane.showMessageDialog(null, "请选择正确文件", "打开失败", JOptionPane.ERROR_MESSAGE);
127                         }
128                     } catch (IOException ex) {
129
130                     }
131
132                 }
133             }
134         });
135
136         jmiExit.addActionListener(new ActionListener() {
137             public void actionPerformed(ActionEvent e) {
138                 System.exit(0);
139             }
140         });
141     }
142
143     public static void main(String args[]) {
144         EventQueue.invokeLater(new Runnable() {// using Runnable anonymous
145                                                 // object
146             public void run() {
147                 JFrame frame = new TestMenu();
148                 frame.setSize(500, 400);
149                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
150                 frame.setVisible(true);
151
152             }
153
154         });
155
156     }
157
158 }
时间: 2024-10-07 05:55:34

Java--图片浏览器的相关文章

CardLayout布局练习(小的图片浏览器)

1 /* 2 涉及Panel中的图片的加载,还有Frame的关闭的方法, CardLayout(int hgap, int vgap)就会决定卡片面板的大小 3 匿名类的使用... 4 */ 5 import java.awt.*; 6 import java.awt.event.*; 7 import javax.swing.*; 8 public class CardLayoutDemo extends Frame{ 9 Panel pCards=new Panel();//卡片面板 10

一步一步打造自己的Android图片浏览器(原创)

今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩略图,点击图片之后,进入图片的大图显示: 在大图显示状态下,可以进行左右滑动,查看其它图片: 在大图显示状态下,我们应该可以查看图片的详细信息: 也许我们还可以支持大图下的放大与缩小? 好了,要求先这么多,我们来实现吧. 第一步:我们要得到手机内的所有图片,展示在一个列表中. android内部为我

事件监听---图片浏览器

事件监听---图片浏览器 code: 1.布局 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="matc

【Android】画廊式的图片浏览器,使用HorizontalScrollView取代Gallery,OnClickListener的参数传递

本来,画廊式的图片浏览器,使用Android中的Gallery就能轻松完成,但是Google说Gallery每次切换图片时都要新建视图,造成太多的资源浪费,已经在安卓api 19之后被彻底废弃,Google推荐使用ViewPager或者HorizontalScrollView来实现Gallery的效果.网上对此的资料太杂,有部分资料写得太高深,完全看不懂.我搞了一个下午,才使用HorizontalScrollView完成画廊式的图片浏览器,如下图: 1.首先是对于res\values\strin

【Android】图片资源的访问与网格式图片浏览器

使用Android的GridView与BaseAdapter能够轻易完成网格式图片浏览器.下面用一个例子还说明,同时说明安卓是如何访问图片资源.其实所谓的图片资源,就是你拷贝到安卓工程的图片.相当于你把几张图片放到网页的站点文件夹,之后用<img>标签引用就这么简单. 如下图,在安卓工程中有8张我自己拷贝进去的图片,与自带的ic_launcher.png,共9张图片. 下面完成一个网格式图片浏览器,一开始先读取这9张图片,点击任何一张查看大图,可以按右上角的菜单返回,也可以按返回键返回. 一.

[Android] 对自定义图片浏览器经常内存溢出的一些优化

首先关于异步加载图片可以参见 夏安明 的博客:http://blog.csdn.net/xiaanming/article/details/9825113 这篇文章最近有了新的更改,大概看了一下,内容更完善了.而我参考他之前的代码,发现了很多与内存有关的问题,这里记录一下发现的问题和解决方法. 本文地址:http://www.cnblogs.com/rossoneri/p/4284478.html 首先上个功能图: 1.本地图片浏览器做成对话框的形式,可以显示文件夹 2. 图片支持多选 3. 图

ViewPager做图片浏览器,加载大量图片OOM的问题修正

1 /** 2 * @author CHQ 3 * @version 1.0 4 * @date 创建时间: 2016/7/26 17:18 5 * @parameter 6 * @return 7 * 图片查看器 8 * //可以查看网络图片 9 * //可以查看本地图片 10 */ 11 public class PhotoScan extends Activity { 12 private PhotoViewPager mViewPager; 13 private List<View>

java 图片压缩变色问题

java图片压缩,有时由于图片自身的原因,如透明的PNG图.改alpha通道或四色图等. 压缩完了,会出现图片变色的情况. 如: 原图 压缩完: 尝试了很多方法,如JDK原生的方式及第三方组件java-image-scaling或thumbnailator都不解决问题. 后来采用阿里的SimpleImage解决.记录一下 SimpleImage github地址:https://github.com/alibaba/simpleimage依赖jar:commons-io-2.4.jarcommo

java图片上传(mvc)

最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.idea开发. 一.图片上传还是使用的这款jq插件.前端部署这款插件,不用说了吧.效果图       二.前台代码只需要盖一个位置.因为是比较好用的插件.插件样式自行修改. 三.后台代码. 后面看不见的. 这个图片上传主要是自己写了几个函数.让图片储存更加方便.分成了年月日储存.但是后期遍历比较困难,

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生产力;提供更广阔的部署选择.Neo4j 3.0 被认为是世界上最具伸缩性的基于Java的图片数据库. Neo4j 3.0.0 主要的新特性: Neo4j 3.0 新特性架构图 全新设计了内部架构移除了所有节点数量限制,数据库关系和属性都可以被存储和索引提供官方支持语言驱动器 (Java.JavaSc