(完整word版)Java课程设计的图片浏览器的讲解

合集下载

java课程设计 图片查看器.

java课程设计 图片查看器.

课程设计报告课程名称面向对象程序设计课程设计专班级、设计题目指导教师设计起止时间:2013 年1月7日至2013年1月18日目录1、课程设计概述 (3)2、系统功能描述 (3)3、系统需求分析与设计 (3)3.1系统需求分析 (3)3.2系统设计 (3)3.2.1 系统总体设计 (3)3.2.2 程序详细设计 (4)4、系统测试和使用说明 (7)4.1系统测试 (7)4.2系统使用说明 (13)5、课程设计总结 (13)5.1遇到的问题和解决方法 (13)5.2心得体会 (13)参考文献 (14)附录 (14)1、课程设计概述鉴于目前当今各种繁杂的图片查看器,我们组根据自身的java知识水平,合力开发了一款相对简单的图片查看器软件。

在深入理解java语言的语法规则及其优势的同时,掌握类与方法的构造方法,掌握基于java的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。

在实践中培养独立分析问题和共同解决问题的作风和能力。

2、系统功能描述本次设计的图片查看器实现了在用户选定的文件目录下循环浏览指定后缀的图片文件,并且可以对选择的图片进行放大,缩小,左旋,右旋,另存,彻底删除等操作。

3、系统需求分析与设计3.1 系统需求分析数字产品的更新日新月异,网络通信技术、图像处理技术以及多媒体技术的发展,使我们的生活变得丰富多彩,让我们的生活变得更便捷,图片的保存和查看已经被越来越多的人所重视,并由此得到了长足的发展。

本图片查看器以其简洁明了易操作的特点实现图片查看的基本功能,从而也就满足了用户的基本要求。

3.2 系统设计3.2.1 系统总体设计(1)系统功能分析本系统要用到以下的Java编程技术实现的功能:图像显示功能:用户需要显示图片,这将由图像显示功能来完成。

显示图片的时候,用到了双缓冲技术来消除闪烁问题。

(2)类图系统中用到了一些基本类、实现了一些接口。

Java图片浏览器的制作与实现

Java图片浏览器的制作与实现

Java图片浏览器的制作与实现作者:蒋鑫陈潇怡来源:《今日湖北·中旬刊》2014年第02期摘要在Java语言的学习中,初学者为了进一步提高的编程能力,窗体的编写实现与实际文件直接的交换运作编写是必学之路。

首先我们需要熟悉awt类和swing类的基本属性和方法,方便我们在编写程序时候合理调用。

熟悉implements接口和类继承调用,具体过程看正文。

关键词 Java 浏览器图片图片浏览器一、对线程的理解同个应用中,多个任务同时进行。

就像QQ聊天应用一样,每打开一个聊天窗口就启动了一个线程。

线程可以有多个,但CPU每时每刻只做一件事。

但是由于cpu处理速度很快,在极短的时间内,CPU在多线程快速跳转处理,我们就感觉是同时进行的。

所以宏观上,线程时并发进行的;从微观角度看,线程是异步执行的。

使用线程的目的是最大限度的利用CPU 资源。

想想QQ聊天的时候,如果没有多线程,一个人的信息没有发完另一个人的信息发不过来,会是什么情况。

在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。

这里浏览器的整体构造分为上下两个场景,上面是显示图片的主要场景,下面是放置按钮的次要场景。

共有7个主要按钮原件,分别是选择图片,上一张,下一张,顺序播放,循环播放,暂停和另存为。

二、具体实现方法首先要写一个公共类,接口监听事件,写私有定义private JFrame 窗体和private MyCanvas mc 的空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。

再定义字符串private String 文件地址、文件名字;定义文件private File[] files和整型int findex用来表示图片文件第几张的数目。

定义文件窗口FileDialog fd_load,fd_save和MyFilter filter;定义按钮Button select,previous,next,start,restart,stop,save;最后定义时间控制器Timer timer。

Java实现的图片查看器

Java实现的图片查看器

《Java实现的图片查看器》实验报告目录实验报告..................................................... 错误!未定义书签。

一、实验目的............................................. 错误!未定义书签。

二、实验原理............................................. 错误!未定义书签。

三、实验环境............................................. 错误!未定义书签。

四、指导教师............................................. 错误!未定义书签。

五、小组成员............................................. 错误!未定义书签。

五、功能需求............................................. 错误!未定义书签。

六、实验总结............................................. 错误!未定义书签。

系统方案书................................................... 错误!未定义书签。

一、引言................................................. 错误!未定义书签。

1、编写目的.......................................... 错误!未定义书签。

2、背景.............................................. 错误!未定义书签。

3、参考资料.......................................... 错误!未定义书签。

java方向课程设计报告—瀑布流图片浏览器

java方向课程设计报告—瀑布流图片浏览器

目录1. 概述 (2)1.1 设计目标 (2)1.2 开发工具的选择 (2)2 需求分析 (2)2.1 系统需求 (2)2.2 功能需求 (2)2.3 性能需求 (3)2.3.1 硬件环境 (3)2.3.2软件环境 (3)3 系统设计 (3)3.1 设计思想与处理流程 (3)3.2 系统层次模块图 (3)4数据结构设计 (4)4.1. 数据分析 (4)4.2. 数据库设计 (4)4.2.1. 设计原则 (4)4.2.2. 面向对象数据库设计方法 (4)4.2.3 表信息 (4)5 系统模块实现 (5)5.1登录与注册模块 (5)5.2学生信息添加模块 (5)5.3学生信息浏览模块 (6)5.4学生信息修改模块 (7)6 心得体会 (7)7 参考文献 (8)1. 概述1.1 设计目标为方便用户浏览本地图片资源,设计并开发基于android的图片浏览器。

为了寻求更好的使用体验,使用瀑布流的布局,以及异步加载的方式。

系统目标如下:1.1.1实现自动加载本地SD卡的所有图片,并按照文件夹分类1.1.2界面简洁,操作简单1.1.3使用时不占用系统太大内存1.1.4实现瀑布流的图片布局1.1.5点击一张图片时放大图片1.2 开发工具的选择1.2.1 Eclipse + ADT1.2.2 JDK1.2.3 android SDK2 需求分析2.1 系统需求如今android操作系统的手机人手一台,基于android的多媒体应用快速发展,本项目正式在这样的环境下开发,使用更人性化的瀑布流的布局方式展现图片列表,本项目基于浏览图片为目标,不具备图片编辑美化处理2.2 功能需求根据上述的信息管理系统的业务流程、要求以及所要实现的目标,我们可以拟出以下需求目标:(1)图片按文件夹的分类查看(2)图片的异步加载机制,和动态内存回收机制(3)图片的瀑布流布局,更加优雅的显示图片资源2.3 性能需求系统的运行对于运行环境的要求是;2.3.1 硬件环境目前市面上的android操作系统的手机基本满足要求●内存: 200M或以上●硬盘空间:20M或以上●需要插入SD卡2.3.2软件环境●操作系统:Android 4.2.2●开发软件:Eclipse3 系统设计3.1 设计思想与处理流程本系统采用面向对象方法进行分析和设计,使用纯面向对象的java语言作为开发语言,使用Android作为开发平台,能够很好的实现系统的开发及测试。

图片浏览器课程设计报告.docx

图片浏览器课程设计报告.docx

图片浏览器设计报告学院土木工程学院班级测绘C111 学号 117544 姓名戴健健成绩一、设计思路1.要达到的目的①培养学生综合利用VB语言进行程序设计的能力,主要是利用VB的标准控件进行设计。

②能够打开常见类型的图片,自动进行缩放,适应PictureBox的大小。

③在FileListBox中只列出图片文件。

④使用StatusBar 控件状态条显示图片文件相关信息,包括图片尺寸(单位:象素)、文件大小和日期等。

⑤使用HscrollBar控件对图片进行缩放。

⑤可以轮流显示FileListBox中列出图片文件。

⑥当图片放大超过窗口大小后,可以提供鼠标移动图片显示。

2.关键问题的解决①使用Loadpicture方法在图片框里加载符合格式要求的图片。

②使用FileListBox方法来显示图片。

③使用PaintPicture方法和改变滚动条的Value属性,使图片能够缩放。

④使用Timer事件更改FileListBox的ListCount属性,使图片能自动浏览。

⑤使用MouseMove事件,在图片过大时,通过鼠标移动使图片显示。

二、模块之间的调用关系,或程序流程图Private Sub Form_Load()Drive1.Drive = App.PathDir1.Path = App.Path'App 是当前的应用程序对象File1.Pattern = "*.bmp;*.jpg;*.ico;*.wmf" '在FileListBox中只列出图片文件。

Picture1.AutoSize = TruePicture2.AutoSize = True'设定自动缩放,适应PictureBox的大小。

'设定StatusBar的数量和属性End SubPrivate Sub Dir1_Change()File1.Path = Dir1.PathEnd subPrivate Sub HScroll1_Change()Picture1.ClsMax = 200Min = 1'设定滚动条的最大、最小值。

Java图片浏览器代码

Java图片浏览器代码

Java图片浏览器代码如下:import javax.swing.*;import java.io.*;public class PictureFrame extends javax.swing.JFrame {/****/private static final long serialVersionUID = 1L;/** Creates new form PictureFrame */public PictureFrame() {initComponents();}private void initComponents() {jPanel2 = new javax.swing.JPanel();jLabel1 = new javax.swing.JLabel();jButton1 = new javax.swing.JButton();jButton2 = new javax.swing.JButton();jMenuBar1 = new javax.swing.JMenuBar();jMenu1 = new javax.swing.JMenu();jMenuItem1 = new javax.swing.JMenuItem();jMenuItem2 = new javax.swing.JMenuItem();jMenuItem4 = new javax.swing.JMenuItem();jMenu2 = new javax.swing.JMenu();jMenuItem5 = new javax.swing.JMenuItem();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setTitle("java PictureView Manager");setBackground(new java.awt.Color(255, 255, 255));setBounds(new java.awt.Rectangle(200, 50, 500, 500));setMaximizedBounds(new java.awt.Rectangle(100, 200, 800, 800));setState(1);jPanel2.setEnabled(false);jLabel1.setIcon(newjavax.swing.ImageIcon("C:\\Java\\Wallpaper1349590065739.jpg"));jLabel1.setBorder(javax.swing.BorderFactory.createMatteBorder(1, 1, 1, 1, new java.awt.Color(255, 0, 0)));jButton1.setText("\u7ee7\u7eed\u6d4f\u89c8");jButton1.addActionListener(new java.awt.event.ActionListener() { @Overridepublic void actionPerformed(java.awt.event.ActionEvent evt) {JButton1Listener(evt);}});jButton2.setText("\u53d6\u6d88\u6d4f\u89c8");jButton2.addMouseListener(new java.awt.event.MouseAdapter() {public void mouseClicked(java.awt.event.MouseEvent evt) {jButton2MouseClicked(evt);}});javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);jPanel2.setLayout(jPanel2Layout);jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 417, Short.MAX_VALUE).addGroup(jPanel2Layout.createSequentialGroup().addGap(88, 88, 88).addComponent(jButton1).addGap(60, 60, 60).addComponent(jButton2).addContainerGap(107, Short.MAX_VALUE)));jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 559, Short.MAX_VALUE).addPreferredGap(ponentPlacement.REL ATED).addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLa yout.Alignment.BASELINE).addComponent(jButton1).addComponent(jButton2)).addContainerGap()));jMenu1.setText("\u6587\u4ef6(F)");jMenuItem1.setText("\u65b0\u5efa(N)");jMenuItem1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {MenuItem1Listener(evt);}});jMenu1.add(jMenuItem1);jMenuItem2.setText("\u6253\u5f00(O)");jMenuItem2.addActionListener(new java.awt.event.ActionListener() { @Overridepublic void actionPerformed(java.awt.event.ActionEvent evt) {MenuItem2Listener(evt);}});jMenu1.add(jMenuItem2);jMenuItem4.setText("\u9000\u51fa(E)");jMenuItem4.addActionListener(new java.awt.event.ActionListener() { @Overridepublic void actionPerformed(java.awt.event.ActionEvent evt) {MenuItem4Listener(evt);}});jMenu1.add(jMenuItem4);jMenuBar1.add(jMenu1);jMenu2.setText("\u5e2e\u52a9(H)");jMenuItem5.setText("\u5173\u4e8e(about)");jMenuItem5.addActionListener(new java.awt.event.ActionListener() { @Overridepublic void actionPerformed(java.awt.event.ActionEvent evt) {aboutListener(evt);}});jMenu2.add(jMenuItem5);jMenuBar1.add(jMenu2);setJMenuBar(jMenuBar1);javax.swing.GroupLayout layout = newjavax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(15, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(42, Short.MAX_VALUE)));pack();}// </editor-fold>private void aboutListener(java.awt.event.ActionEvent evt) {JOptionPane.showMessageDialog(jMenuItem5,"嗖嗖嗖,谢谢大家学习使用","PictureView",JOptionPane.YES_NO_OPTION);}private void MenuItem4Listener(java.awt.event.ActionEvent evt) {// TODO将在此处添加您的处理代码:System.exit(1);}private void MenuItem2Listener(java.awt.event.ActionEvent evt) {// TODO将在此处添加您的处理代码:JFileChooser chooser = new JFileChooser();filename=chooser.getSelectedFile().getName();openPath=chooser.getCurrentDirectory().getPath();System.out.println(openPath);ImageIcon imag=new ImageIcon(openPath+"\\"+filename);jLabel1.setIcon(imag);}private void MenuItem1Listener(java.awt.event.ActionEvent evt) {// TODO将在此处添加您的处理代码:ImageIcon imag=new ImageIcon();jLabel1.setIcon(imag);}private void jButton2MouseClicked(java.awt.event.MouseEvent evt) { System.exit(1);}private void JButton1Listener(java.awt.event.ActionEvent evt) { File file=new File(openPath);String[] str=file.list();str=file.list();ImageIcon imag=new ImageIcon(openPath+"\\"+str[i]);jLabel1.setIcon(imag);i++;}/*** @param args the command line arguments*/public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {@Overridepublic void run() {new PictureFrame().setVisible(true);}});}// 变量声明 - 不进行修改private javax.swing.JButton jButton1;private javax.swing.JButton jButton2;private javax.swing.JLabel jLabel1;private javax.swing.JMenu jMenu1;private javax.swing.JMenu jMenu2;private javax.swing.JMenuBar jMenuBar1;private javax.swing.JMenuItem jMenuItem1;private javax.swing.JMenuItem jMenuItem2;private javax.swing.JMenuItem jMenuItem4;private javax.swing.JMenuItem jMenuItem5;private javax.swing.JPanel jPanel2;private String filename;private String openPath;private static int i=0;// 变量声明结束}运行后如下图。

Java课程设计报告原代码图片查看器图片进行放大缩小左旋右旋另存彻底删除

Java课程设计报告原代码图片查看器图片进行放大缩小左旋右旋另存彻底删除

湖南商学院告报设计程课》序设计象《面向对程题目图片查看器姓名: 蒋颖颖070920101 : 号学业: 计算机科学与技术专0703班:级计科志指导教师: 杭师称:讲职计算机与电子工程学院2009年6月课程设计评审表录目................................................................................................ 5 .1、课程设计概述................................................................................................ 5 .2、系统功能描述.................................................................................... 5 .3、系统需求分析与设计........................................................................................... 5 .系统需求分析3.1 (5).系统设计3.2 .............................................................................. 5 .3.2.1 系统总体设计.............................................................................. 6 .3.2.2 程序详细设计.................................................................................... 9 . 4、系统测试和使用说明...................................................................................................9 .4.1系统测试......................................................................................... 11 .系统使用说明4.2 .............................................................................................. 11 .5、课程设计总结......................................................................... 11 .遇到的问题和解决方法5.1 ................................................................................................. 11 .心得体会5.2 . (11)参考文献.................................................................................................................. (12)附录图片查看器1、课程设计概述为提高学生理论与实践相结合的能力,计电学院于2009年6月开展了为期两周的面向对象课程设计,针对对象为07级全体计科专业学生。

java编windows图片浏览器

java编windows图片浏览器

package viewer;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.util.ArrayList;import javax.swing.AbstractAction;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JToolBar;import javax.swing.filechooser.FileFilter;interface Action{void execute(V iewerService service,V iewerFrame frame);}public class V iewer {public static void main(String[] args) {// TODO code application logic hereV iewerFrame f = new V iewerFrame();f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}class ViewerFrame extends JFrame//主界面类{private int width = 800;private int height = 600;private JLabel label = new JLabel();V iewerService service = new V iewerService();public V iewerFrame(){super();init();}ActionListener menuListener = new ActionListener(){public void actionPerformed(ActionEvent e){service.menuDo(V iewerFrame.this ,e.getActionCommand());}};public void createMenuBar()//创建文件、工具、帮助菜单{JMenuBar menuBar = new JMenuBar();String[] menuArr = { "文件(F)","工具(T)","帮助(H)"};String[][] menuItemArr ={{"打开(O)","-","退出(X)"},{"放大(M)","缩小(O)","-","上一个(X)","下一个(P)"},{"帮助主题","关于"}};for(int i = 0; i < menuArr.length;i++){JMenu menu = new JMenu(menuArr[i]);for(int j = 0;j < menuItemArr[i].length;j++){if(menuItemArr[i][j].equals("-"))menu.addSeparator();else{JMenuItem menuItem = new JMenuItem(menuItemArr[i][j]);menuItem.addActionListener(menuListener);menu.add(menuItem);}}menuBar.add(menu);}this.setJMenuBar(menuBar);}void init()//初始化界面{this.setTitle("看图程序");this.setPreferredSize(new Dimension(width,height));createMenuBar();JPanel toolBar = createToolPanel();this.add(toolBar,BorderLayout.NORTH);this.add(new JScrollPane(label),BorderLayout.CENTER);this.setV isible(true);this.pack();}JLabel getLabel()//获取显示图片的JLabel{return bel;}JPanel createToolPanel()//创建放大、缩小、上一张、下一张等工具按钮{JPanel panel = new JPanel();JToolBar toolBar = new JToolBar("工具");toolBar.setFloatable(false);panel.setLayout(new FlowLayout( FlowLayout.LEFT));//org.crazyit.viewer.action.String[] toolarr = {"viewer.OpenAction","stAction","viewer.NextAction","viewer.BigAction","viewer.SmallAction"};for(int i =0; i < toolarr.length;i++){V iewerAction action = new V iewerAction(new ImageIcon("img/"+toolarr[i]+".gif"),toolarr[i],this);JButton button = new JButton(action);toolBar.add(button);}panel.add(toolBar);return panel;}}class ViewerFileChooser extends JFileChooser{private void addFilter()this.addChoosableFileFilter(new MyFileFilter(new String[]{".BMP"},"BMP (*.BMP)"));this.addChoosableFileFilter(new MyFileFilter(new String[]{".JPG",".JPEG",".JPE",".JFIF"},"JPEG (*.JPG;*.JPEG;*.JPE;*.JFIF)"));this.addChoosableFileFilter(new MyFileFilter(new String[]{".GIF"},"GIF (*.GIF)"));this.addChoosableFileFilter(new MyFileFilter(new String[]{".TIF",".TIFF"},"TIFF (*.TIF;*.TIFF)"));this.addChoosableFileFilter(new MyFileFilter(new String[]{".PNG"},"PNG (*.PNG)"));this.addChoosableFileFilter(new MyFileFilter(new String[]{".ICO"},"ICO (*.ICO)"));this.addChoosableFileFilter(new MyFileFilter(new String[]{".BMP",".JPG",".JPEG",".JPE",".JFIF",".GIF","TIF",".TIFF",".PNG",".ICO"},"所有图形文件"));}public V iewerFileChooser(){super();setAcceptAllFileFilterUsed(false);addFilter();}class MyFileFilter extends FileFilter{String[] suffarr;String description;public MyFileFilter(String[] suffarr,String description){super();this.suffarr = suffarr;this.description = description;}public boolean accept(File file){for(String s:suffarr){if(file.getName().toUpperCase().endsWith(s))return true;}return file.isDirectory();}@Overridepublic String getDescription() {return this.description;}}class ViewerService //业务处理类{private static V iewerService service = null;private V iewerFileChooser fileChooser = new ViewerFileChooser();private File currentFile = null;private File currentDirectory = null;private ArrayList<File> currentFiles = null;private double range = 0.1;private boolean isIcon = true;private ImageIcon icon = null;private double enLargeRange = 1;static V iewerService getInstance(){if (service == null) {service = new V iewerService();}return service;}void open(V iewerFrame frame){if(fileChooser.showOpenDialog(frame) == V iewerFileChooser.APPROVE_OPTION)//给打开的文件赋值{this.currentFile = fileChooser.getSelectedFile();String name = this.currentFile.getPath();File cd = fileChooser.getCurrentDirectory();if(cd != this.currentDirectory || this.currentDirectory == null){FileFilter[] fileFilters = fileChooser.getChoosableFileFilters();File files[] = cd.listFiles();this.currentFiles = new ArrayList<File>();for(File file: files){if(!file.isHidden())for(FileFilter filter : fileFilters){if(filter.accept(file)){this.currentFiles.add(file);break;}}}ImageIcon icon = new ImageIcon(name);frame.getLabel().setIcon(icon);}}void zoom(V iewerFrame frame,boolean isEnlarge){if(enLargeRange > 0.2)enLargeRange = isEnlarge ? enLargeRange + range :enLargeRange -range;elseif(isEnlarge)enLargeRange = enLargeRange + range ;if(isIcon||icon == null){icon = (ImageIcon)frame.getLabel().getIcon();isIcon = false;}if(icon != null){int width = (int)(icon.getIconWidth() * enLargeRange);int height = (int)(icon.getIconHeight() * enLargeRange);ImageIcon newIcon = new ImageIcon(icon.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));frame.getLabel().setIcon(newIcon);}}void last(ViewerFrame frame){if(this.currentFiles != null && !this.currentFiles.isEmpty()){isIcon = true;File file;ImageIcon icon ;int index = this.currentFiles.indexOf(this.currentFile);if(index > 0){file = (File)this.currentFiles.get(index-1);icon = new ImageIcon(file.getPath());frame.getLabel().setIcon(icon);this.currentFile = file;}elseif(index == 0)file = (File)this.currentFiles.get(currentFiles.size()-1);icon = new ImageIcon(file.getPath());frame.getLabel().setIcon(icon);this.currentFile = file;}}}void next(V iewerFrame frame){if(this.currentFiles != null && !this.currentFiles.isEmpty()){isIcon = true;File file;ImageIcon icon ;int index = this.currentFiles.indexOf(this.currentFile);if(index < currentFiles.size()-1){file = (File)this.currentFiles.get(index+1);icon = new ImageIcon(file.getPath());frame.getLabel().setIcon(icon);this.currentFile = file;}elseif(index == currentFiles.size()-1){file = (File)this.currentFiles.get(0);icon = new ImageIcon(file.getPath());frame.getLabel().setIcon(icon);this.currentFile = file;}}}void menuDo(V iewerFrame frame,String cmd){if(cmd.equals("打开(O)"))open(frame);if(cmd.equals("放大(M)"))zoom(frame,true);if(cmd.equals("缩小(O)"))zoom(frame,false);if(cmd.equals("上一个(X)"))last(frame);if(cmd.equals("退出(X)"))System.exit(0);}}class ViewerAction extends AbstractAction{private Action action = null;private V iewerFrame frame = null;private String actionName= "";public V iewerAction(ImageIcon icon,String actionName,ViewerFrame frame){super("",icon);this.frame = frame;this.actionName = actionName;}private Action getAction(String actionName){try{if(this.action == null){Action action = (Action)Class.forName(actionName).newInstance();this.action = action;}return this.action;}catch(Exception e){return null;}}public void actionPerformed(ActionEvent ae){V iewerService service = V iewerService.getInstance();Action action = getAction(this.actionName);action.execute(service, frame);}}class OpenAction implements Action{public void execute(ViewerService service, V iewerFrame frame){service.open(frame);}}class NextAction implements Action{@Overridepublic void execute(ViewerService service, V iewerFrame frame){service.next(frame);}}class LastAction implements Action{public void execute(ViewerService service, V iewerFrame frame){st(frame);}}class BigAction implements Action{@Overridepublic void execute(ViewerService service, V iewerFrame frame){service.zoom(frame, true);}}class SmallAction implements Action{@Overridepublic void execute(ViewerService service, V iewerFrame frame) {service.zoom(frame, false);}}各图片命名按顺序如下:del viewer.BigAction stAction viewer.NextAction viewer.OpenAction viewer.SmallActionPS:代码参考自疯狂java。

图片浏览器的课程设计报告

图片浏览器的课程设计报告

电子信息工程专业课程设计题单班级 0882053 学生张彬彬课程名称专业课程设计课题图片浏览器的实现设计要求利用visual C#开发工具实现一图片浏览器。

要求完成以下功能:1、打开多张图片,可以控制前后图片的浏览2、可以设置图片的显示方式:全屏或置顶等3、在运行状态中隐藏界面,显示在托盘程序中课题发给日期 2011-6-10 课程设计完成日期 2011-6-21 指导教师方芳等评语:评分:摘要此次课程设计的课题是图片浏览器,通过Visual Studio软件完成。

拿到课题感觉不是很难,只需要用pictureBox1将图片显示出来。

但当开始编程序的时候,就发现了不少问题。

比如说:如何将图片地址全部扫描进来,并存储、什么是在运行状态中隐藏界面,显示在托盘程序中等等都是课本上没有的或者以前没学过的。

于是我们通过图书馆查阅资料,参考程序并在老师的指导下将课题完成了,实现了图片的上一张下一张浏览、放大、缩小、全屏、等要求的功能,并添加了定时器,能实现简单的循环播放功能。

关键字:图片浏览器、全屏、上一张、下一张目录摘要 (2)第一章流程图及功能描述 (3)第二章概要设计及详细设计 (4)第三章调试及结果分析 (8)第四章总结 (13)第五章参考文献 (14)附录程序代码 (15)第一章流程图及功能描述1.1流程图图片浏览器程序流程图1.2功能描述运行程序后如不查找图片所在文件夹,则不能使用。

查找后,将文件夹内JPG、GIF等格式的图片地址扫描存储在listbox内,通过改变其索引实现上下张浏览等功能,扩大缩小等功能则是通过改变pictureBox1的高宽来实现的。

第二章概要设计及详细设计2.1 概要设计利用visual C#设计一个图片浏览器,能完成浏览的基本功能。

2.2 详细设计a:扫描文件夹图片FolderBrowserDialog folder = new FolderBrowserDialog();if (folder.ShowDialog() == DialogResult.OK){listBox1.Items.Clear();PPath = folder.SelectedPath;DirectoryInfo Dinfo = new DirectoryInfo(PPath);FileSystemInfo[] FSinfo = Dinfo.GetFileSystemInfos();for (int i = 0; i < FSinfo.Length; i++){string FileType =FSinfo[i].ToString().Substring(FSinfo[i].ToString().LastIndexOf(".") + 1, (FSinfo[i].ToString().Length -FSinfo[i].ToString().LastIndexOf(".") - 1));FileType = FileType.ToLower();if (FileType == "jpg" || FileType == "png" || FileType == "bmp" ||FileType == "gif" || FileType == "jpeg"){listBox1.Items.Add(FSinfo[i].ToString());}}b:图片的放大if (pictureBox1.Height <= 800 && pictureBox1.Width <= 1000){pictureBox1.Height = pictureBox1.Height * 2;pictureBox1.Width = pictureBox1.Width * 2;}c:图片的缩小if (pictureBox1.Height >= 40 && pictureBox1.Width >= 60){pictureBox1.Height = pictureBox1.Height / 2;pictureBox1.Width = pictureBox1.Width / 2;}d:图片的上下张浏览try{if (listBox1.SelectedIndex != 0){ button4.Enabled = true;listBox1.SetSelected(listBox1.SelectedIndex - 1, true);}else button1.Enabled = false;}catch { }pictureBox1.Image = Image.FromFile(PPath + "\\" +listBox1.SelectedItem);}//当浏览到最后一张时下一张功能失效try{if (listBox1.SelectedIndex < listBox1.Items.Count - 1) {button1.Enabled = true;listBox1.SetSelected(listBox1.SelectedIndex + 1, true);}else button4.Enabled = false;}catch { }pictureBox1.Image = Image.FromFile(PPath + "\\" +listBox1.SelectedItem);}//当浏览到最后一张时下一张功能失效e:全屏及还原(对API不太了解所以直接将实验室电脑屏幕大小赋给picturebox)if (button6.Text == "全屏"){button6.Text = "还原";pictureBox1.Height = 690;pictureBox1.Width = 1280;}else{button6.Text = "全屏";pictureBox1.Height = 440;pictureBox1.Width = 429;}f:显示在托盘中在窗体中放置notifyIcon控件,导入图标。

图片浏览器(java版)

图片浏览器(java版)

图片浏览器(后面附有完整代码)一、需求分析1、首先。

因为要显示图片所以要先有一个界面;用JFrame;2、因为要能显示选定文件夹内的图片,所以要有一个文件夹选择器;用JTree;3、显示图片的滚动面板;用JScrollPane;4、因为要对图片进行分类,所以要设计分类模块;5、因为要对图片进行备份,所以要设计备份模块;6、因为要对图片进行幻灯播放,所以要设计幻灯播放模块;二、概要设计本次课程设计模块图、系统流程图:三、运行环境、开发语言操作系统:Windows XP 专业版 32位 SP3 ( DirectX 9.0c )开发工具:MyEclipse开发语言:java四、详细设计1 程序清单String pt;鼠标点击的图片的绝对路径File[] files2;面板上正在显示的图片文件JLabel[] imageLabel;图片绑定的JLabel控件组JLabel jlabel,jimageLabel; 图片绑定的JLabel控件JPanel jp1,jp2,jp3;显示不同内容的面板JButton[] jb;按钮数组private JTree tree;文件夹选择树private JScrollPane jsp1,jsp2,jsp3;滚动面板Timer timer;计时器public PictureDir()类的构造函数WindowAction窗体事件TreeSelect文件夹选择树事件FileDidianListener分类为地点事件FileRenwuListener分类为人物事件FileXiangceListener分类为相册事件FileQitaListener分类为其它事件FileZipListener备份事件FileBackListener还原事件MouseAction鼠标点击事件FileStartListener幻灯片播放事件JCAction显示分类图片事件read(String)读文件函数save(String,String)写文件函数unzip(String,String)解压缩函数resizeIcon(ImageIcon,JLabel)控制图片显示大小的函数deleteFile(File)删除文件函数main(String[])主函数2 主要代码整个程序的界面如下图:2.1 选择文件夹功能class TreeSelect implements TreeSelectionListener{public void valueChanged(TreeSelectionEvent e) {TreePath path=e.getPath();DefaultMutableTreeNodenode=(DefaultMutableTreeNode)path.getLastPathComponent();Object userObject=node.getUserObject();if(!(userObject instanceof File)){return;}File folder=(File)userObject;if(!folder.isDirectory())return;File[] files1=initImageSets1(folder);for(File file:files1){node.add(new DefaultMutableTreeNode(file));}files2=initImageSets2(folder);for(int i=0;i<imageLabel.length;i++){imageLabel[i].setIcon(null);imageLabel[i].setBorder(null);}for(int i=0;i<files2.length;i++){imageLabel[i].setIcon(newImageIcon(files2[i].toString()));imageLabel[i].addMouseListener(new MouseAction());imageLabel[i].setName(String.valueOf(i));resizeIcon(newImageIcon(files2[i].toString()),imageLabel[i]);}}private File[] initImageSets1(File pictureDir){return pictureDir.listFiles(new FilenameFilter(){public boolean accept(File dir,String name){if(!new File(dir,name).isFile())return true;elsereturn false;}});}private File[] initImageSets2(File pictureDir){return pictureDir.listFiles(new FilenameFilter(){public boolean accept(File dir,String name){if(!new File(dir,name).isFile())return false;String lowserName=name.toLowerCase();if(lowserName.endsWith("jpg")||lowserName.endsWith("jpeg") ||lowserName.endsWith("gif")||lowserName.endsWith("png")||lowserName.endsWith("GIF")||lowserName.endsWith("TIFF")||lowserName.endsWith("ICO")||lowserName.endsWith("BMP")){return true;}return false;}});}}结果:2.2图片分类功能class FileDidianListener implements ActionListener{public void actionPerformed(ActionEvent e) {try {save(pt,"didian.txt");JOptionPane.showMessageDialog(null,"分类为“地点”完成!");} catch (Exception e1) {e1.printStackTrace();}}}class FileRenwuListener implements ActionListener{public void actionPerformed(ActionEvent e) {try {save(pt,"renwu.txt");JOptionPane.showMessageDialog(null,"分类为“人物”完成!");} catch (Exception e1) {e1.printStackTrace();}}}private DefaultMutableTreeNode rootNode;class FileXiangceListener implements ActionListener{public void actionPerformed(ActionEvent e) {try {save(pt,"xiangce.txt");JOptionPane.showMessageDialog(null,"分类为“相册”完成!");} catch (Exception e1) {e1.printStackTrace();}}}class FileQitaListener implements ActionListener{public void actionPerformed(ActionEvent e) {try {save(pt,"qita.txt");JOptionPane.showMessageDialog(null,"分类为“其它”完成!");} catch (Exception e1) {e1.printStackTrace();}}}结果:2.3图片备份和还原功能class FileZipListener implements ActionListener{public void actionPerformed(ActionEvent e) {try {int a=0;File file1=new File(pt);File file2=new File("imagesdata.zip");File f=new File("D:/1/3/5");f.mkdirs();if(!file2.exists()){file2.createNewFile();a=1;}elseunzip("imagesdata.zip","D:/1/3/5");FileOutputStream fos= new FileOutputStream(file2);ZipOutputStream zos=new ZipOutputStream(fos);byte[] buffer=new byte[1024];if(a==0){File[] files=f.listFiles();File[] filess=new File[files.length+1];for(int i=0;i<files.length;i++){filess[i]=files[i];}filess[filess.length-1]=file1;for (int i = 0; i < filess.length; i++) {String[] st=filess[i].getName().split(".");for(int j=0;j<st.length;j++){JOptionPane.showMessageDialog(null,j+"="+st[j]);}ZipEntry entry=new ZipEntry(newDate().getTime()+filess[i].getName());FileInputStream in = newFileInputStream(filess[i]);zos.putNextEntry(entry);int len;while ( (len = in.read(buffer)) > 0) {zos.write(buffer, 0, len);}zos.closeEntry();in.close();}}if(a==1){ZipEntry entry=new ZipEntry(newDate().getTime()+file1.getName());FileInputStream fis=new FileInputStream(file1);zos.putNextEntry(entry);int read=0;while((read=fis.read(buffer))!=-1){zos.write(buffer,0,read);}zos.closeEntry();fis.close();}zos.close();fos.close();JOptionPane.showMessageDialog(null,"备份完成!");deleteFile(f);} catch (Exception e1) {e1.printStackTrace();JOptionPane.showMessageDialog(null,"备份失败!");File f=new File("D:/1/2/3");deleteFile(f);}}}class FileBackListener implements ActionListener{public void actionPerformed(ActionEvent e) {JFileChooser chooser1;chooser1=new JFileChooser();chooser1.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);chooser1.setCurrentDirectory(new File("."));int result=chooser1.showOpenDialog(new JFrame());File file=chooser1.getSelectedFile();if(result==JFileChooser.APPROVE_OPTION);{t ry{unzip("imagesdata.zip" ,file.toString());}catch (IOException e1) {e1.printStackTrace();}}}}结果:2.4 幻灯片播放功能class FileStartListener implements ActionListener{public void actionPerformed(ActionEvent e){JFrame f;JPanel j;JButton startBtn;JButton stopBtn;startBtn=new JButton("继续");startBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ee){if(timer!=null)timer.start();}});stopBtn=new JButton("暂停");stopBtn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent ee){if(timer!=null)timer.stop();}});f=new JFrame();j=new JPanel();f.setSize(800,700);f.setLocation(300,50);f.setVisible(true);Container c=f.getContentPane();c.add(new JScrollPane(jimageLabel));j.add(startBtn);j.add(stopBtn);c.add(j,"South");if(files2.length==0)return;timer=null;timer=new Timer(200,new ActionListener(){int index=0;public void actionPerformed(ActionEvent el){jimageLabel.setIcon(new ImageIcon(newImageIcon(files2[index].toString()).getImage().getScaledInstance(750,600, Image.SCALE_SMOOTH)));index++;index%=files2.length;}});timer.setCoalesce(true);timer.setDelay(3*500);timer.start();}}结果:五、调试与分析1、首先遇到的问题是,如何在同一个面板上显示多张图片?解决办法:将多个用于显示图片的JLabel控件,添加到JScollPanel控件中。

(完整版)java浏览器毕业课程设计

(完整版)java浏览器毕业课程设计

重庆大学计算机系课程设计报告课程名称: Java程序设计课程代码:题目: WEB浏览器开发年级专业班: 计算机01班学生姓名:学号:指导老师:开题时间: 2012年12月15日完成时间: 2013年01月03日2012年元12月15日课程设计任务书及成绩评定Java程序设计课程名称:完成者:1、设计的目的与要求本课程设计需要学生运用面向对象编程和网络编程方法等,建立模型,最后设计出一个简单的网页浏览器,使该浏览器具有打开内容简单的网页,以及将网页另存,网页前进和后退,并且能够查看所浏览网页的源代码。

目录摘要 ...........................................................................................................................................................1 引言 .........................................................................................................................................................2 设计任务与目的 .....................................................................................................................................3 需求分析 .................................................................................................................................................4 系统设计 .................................................................................................................................................4.1 总体设计 ......................................................................................................................................4.1.1 WebBrowser.java .............................................................................................................4.1.2 ViewSourceFrame.java....................................................................................................4.2 用例图与类图 ..............................................................................................................................4.2.1 用例图 ...............................................................................................................................4.2.2 系统类图 ...........................................................................................................................5 系统实现 .................................................................................................................................................5.1.主要功能运行效果 .........................................................................................................................5.2系统运行和发布 .............................................................................................................................6 结束语 .....................................................................................................................................................参考文献 .......................................................................................................................................................致谢 ...............................................................................................................................................................附录A:系统源程序 ...................................................................................................................................附录B:编码规范 .......................................................................................................................................摘要本设计可以帮助同学掌握和应运所学的面向对象程序设计网页编程内容,培养同学们建立对象模型,处理对象和对象集关系和对网络编程的能力,训练同学为解决实际问题而创建较完整的简单面向对象和网络编程应运程序的独立编程能力.本设计是一个常见的网页浏览器应运程序.系统实现的功能:打开url链接相关的网页;将网页另存为到硬盘上;网页前进;网页后退;查看网页源代码.同时此浏览器所占内存空间小,对于硬件的要求低,对于经常上网查资料的用户来说是一个不错的选择。

第3章 图片浏览器

第3章 图片浏览器

第3章图片浏览器第3章 图片浏览器3.1 图片浏览器概述相信使用Window操作系统的大多数用户,都使用过Windows的图片浏览器,或者是功能更强大与复杂的ACDSee图片浏览器(这个还支持编辑图片),图片浏览器最基本的功能是能浏览一个目录中的所有图片,并可以点击浏览上一张图片或者下一张图片,还有对图片放大与缩小,或者翻转图片等操作,在这里,实现了图片的浏览功能,导航功能(下一张、上一张),放大缩小功能。

本章将实现一个最简单的图片浏览器,包括了打开图片、放大与缩小图片、查看上一张和下一张图片等功能,图片浏览器的最终效果如图3.1所示。

图3.1 图片浏览器第3章 图片浏览器·2· 3.2 创建图片浏览器的相关对象我们首先需要创建图片浏览器的相关对象。

我们先创建图片浏览器的界面对象ViewerFrame ,然后在该类中,我们为菜单、按钮加了事件监听器,所以定义了一个继承AbstractAction 的类ViewerAction 来响应这些动作。

在Action 中响应动作,就到处理具体逻辑的步骤,我们把所有的逻辑处理放到ViewerService 类中,ViewerService 中包括打开图片、上一张、下一张、放大和缩小图片等功能,为了程序更好的解耦合,我们可以把具体的某些业务处理放置到独立的类中进行处理。

除了以上所说的几个类,由于我们这个程序有打开图片的操作,所以需要一个文件过滤器(只能选择图片类型的文件),所以定义了一个继承JFileChooser 的类ViewChooser ,这个类里面定义了自己的文件过滤器。

本章中所涉及的对象及它们之间的关系如图3.2所示。

图 3.2 图片浏览器类图本章程序的功能较为简单,因此所涉及的对象也并不复杂,只有简单的五个对象。

第3章 图片浏览器·3·3.2.1 文件过滤器如果要使文件对话框实现文件过滤功能,就需要结合FileFilter 类来进行文件操作,文件过滤器是FileFilter 的一个继承,也是文件对话框的内部类,里面重写了FileFilter 的accept 与getDescription 方法:boolean accept( File f ),判断文件是否属于图片类型。

Java语言ppt课件(完整版)

Java语言ppt课件(完整版)

封装与访问控制
封装(Encapsulation)的原则:将对象的属性和方法封装在类内部,隐藏实现细节,提供公共接口供 外部访问。
访问控制符(Access Modifiers):使用private、protected、public等访问控制符来控制类成员的可 见性和访问权限。
构造函数(Constructor)与析构函数(Destructor):构造函数用于创建对象并初始化属性,析构函 数用于释放对象占用的资源。
3
2011年,Oracle公司收购Sun公司,成为Java的 新东家
Java语言的历史与发展
2014年,JDK 8发布,引入了 Lambda表达式、Stream API等特性
2021年,JDK 16发布,继续增强 Java语言的功能和性能
Java语言的特点与优势
跨平台性
Java语言编写的程序可以在任何支持Java的 平台上运行,无需修改源代码
1996年,JDK 1.1发 布,增加了对内部类 和反射的支持
1995年,Java语言 正式发布,并推出 JDK 1.0
Java语言的历史与发展
1
1998年,JDK 1.2(也被称为Java 2)发布,增 加了Swing图形用户界面库和Java插件
2
2004年,JDK 5.0发布,引入了泛型、自动装箱/ 拆箱、枚举等特性
JSP页面元素
JSP页面由指令、脚本元素、动作 和内置对象等组成。指令用于控 制JSP页面的整体结构,脚本元素 用于嵌入Java代码,动作用于执 行特定的操作,内置对象则提供 了一些常用的功能。
JSP与Servlet的关系
JSP和Servlet都是Java Web开发 中的重要技术,它们之间有着密 切的联系。JSP页面最终会被转换 成Servlet来处理请求,因此可以 说JSP是Servlet的一种特殊形式 。同时,JSP提供了更加简洁和易 用的页面开发方式,而Servlet则 更适合处理复杂的业务逻辑。

Java课程设计的图片浏览器的讲解

Java课程设计的图片浏览器的讲解

.课程设计的任务及要求二.需求分析图形化界面(GUI)编程,编写一个图片浏览器程序可以支持“ “.GIF”,“.JPEG',“.jpeg ”,“.TGA',“.JPG”,“.jpg ”等格式,单张打开图片,可以将同一目录下的图片按缩略图打开按“上一张”“下一张”按钮可以显示相应图片。

运行Applet时,图像不是一气呵成的,因为方法不是吧图像完整的装入内存再显示的。

于此相反,方法创建一个线程,该线程与Applet的原有线程并发执行,一边装入一边显示,从而产生上了不联需显示的现象。

为了提高图像才显示效果,可以采用双缓冲技术:首先把图像装入内存,然后再显示在屏幕上。

三.设计思路3.1界面设计选择图片按钮:主要用dir函数实现图片的遍历。

上一张,下一张:通过做标轴回调函数实现。

由于本软件为单机软件,不需要大量的数据读写和数据交换,实现上、下功能要求只能读取PictureBox控件当前加载的目录,读取当前路径,创建一维数组。

frame = n ewFrame( "Pictureviewer");Panel pb = n ewPa nel();Button select = newButton("选择图片");previous = newButton("上——张");next = newButton("下一张”);select.addActionListener( this );previous .addActionListener( this );3.2. 图像加载:Applet常用来显示储存在文件中的图像,多数Applet使用的是GIF或JPEG 格式的图像文件。

需Applet加载图像只需首先定义Image对象,然后使用getlmage()方法把图像和文件结合起来即可。

image_width = bi.getWidth(this);image_height = bi.getHeight(this);double image_proporti on = 1.0 * image_height / image_width;System.out.pri ntl n("image: w "+image_width+" ,h "+image_height+" ,p1 "+image_proportion);if(image_proporti on > scree n_ proportio n){ image_height = scree n_height;image_width = (i nt)(image_height / image_proportio n); System.out.pri ntl n(” p1>p0 w= "+image_width); }else{ image_width = scree n_width; image_height = (int)(image_width * image_proporti on); System.out.pri ntln (” p0>p1 h="+image_height); }四.详细设计4.1.程序设计流程图4.2. 源程序代码package C;import java.io.File;import java.io.File nameFilter;public class MyFilter impleme nts File nameFilter{ private Strin g[] exte nsion; public MyFilter(){extension = newString[]{".jpg", ".JPG", ".gif", ".GIF", ".png", ".PNG", ".jpeg", ".JPEG"};}public MyFilter(Stri ng[] exte nsio n){this.exte nsion = exte nsion;}public boolea n accept(File dir,Stri ng n ame){for(Stri ng s : exte nsion){if(n ame.e ndsWith(s)){return true;}}return false;}}package C;import java.awt.*;import java.awt.eve nt.*;import java.awt.image.*;public class MyCa nvas exte nds Can vas impleme nts Comp onen tListe ner{ */private static fin al l ong serialVersi on UID = 1L;private Bufferedlmage bi;private Image im;private int image_width;private int image_height;public void setImage(BufferedImage bi){this.bi = bi;this.zoom();}public void pain t(Graphics g){g.drawlmage(im,(this.getWidth()-image_width)/2,(this.getHeight()-image_height)/2,this);}public void comp onen tResized(Comp onen tEve nt e){if(bi != null){System.out.pri ntln ("resize!!");this.zoom();this.repai nt();}}public void comp onen tMoved(Comp onen tEve nt e){}public void comp onen tShow n( Comp onen tEve nt e){}public void componentHidden(ComponentEvent e){}public void zoom(){if(bi == n ull)return;int scree n_width = this.getWidth();int scree n_height = this.getHeight();double scree n_proporti on = 1.0 * scree n_height / scree n_width;System.out.pri ntl n("scree n: w "+scree n_width+" ,h "+scree n_height+" ,p0 "+scree n_proporti on);image_width = bi.getWidth(this);image_height = bi.getHeight(this);double image_proporti on = 1.0 * image_height / image_width;System.out.pri ntl n("image: w "+image_width+" ,h "+image_height+" ,p1 "+image_proporti on);if(image_proporti on > scree n_proportio n){image_height = scree n_height;image_width = (i nt)(image_height / image_proportio n);System.out.pri ntl n(” p1>p0 w= "+image_width);}else{image_width = scree n_width;image_height = (in t)(image_width * image_proporti on);System.out.pri ntln (” p0>p1 h= "+image_height);} _im = bi.getScaledl nsta nce(image_width,image_height,lmage.SCALE_SMOOTH);} ~ ~ 一}package C;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.io.*;import javax.imageio.*;public class T implements ActionListener{private privateFrame frame; MyCa nvas mc;private Stri ng fpath ; private Stri ng fname; private File[] files ;private int findex ;private FileDialog fd_load ;private MyFilter filter ;private Butt on previous ;private Butt on n ext ;public static void main( String args[]) throws Exception { n ewT().i ni t();}public void in it(){frame = n ewFrame( "Pictureviewer");Panel pb = n ewPa nel();Button select = newButton("选择图片"); previous = newButton("上——张"); next = newButton("下一张”);select.addActionListener( this );previous .addActionListener( this );next .addActionListener( this );pb.add(select);pb.add( previous );pb.add( n ext);mc= n ewMyCa nvas(); mcsetBackground( newColor(200,210,230));mcaddComponentListener( m();frame.add(pb, "North");frame .add( mc "Center");frame .setSize(360,360);frame .setLocati on (400,200);frame .addWindowListener( newWindowAdapter(){public void windowClosing(WindowEvent e){System. exit (0);}});frame.setVisible( true );this .validateButton();filter = newMyFilter();fd」oad = n ewFileDialog( frame,"打开文件”,FileDialog. LOADfd」oad .setFilenameFilter( filter );} _public void action Performed(Acti on Eve nt e){Stri ng comma nd = e.getActio nComma nd();if (command.equals(” 选择图片")){fd」oad .setVisible( true );fpath = fd」oad .getDirectory();fname = fd_load .getFile();if ((fpath != null ) && ( fname != null )){this .display( newFile( fpath + fname));files = newFile( fpath ).listFiles( filter );this .setIndex();}} else if (command.equals(” 上一张")){findex --;if (findex <0)fin dex = 0;this .display( files [ findex ]);} else if (command.equals(” 下一张")){fin dex ++;if (findex >= files . length )findex = files . length -1;this .display( files [ findex ]);}this .validateButton();}public void display(File f){try {BufferedImage bi = ImageIO. read (f);mcsetImage(bi);frame .setTitle( "PictureViewer - [" + f.getName() + "]");} catch (Exception e){e.pri ntStackTrace();}mcrepai nt();}public void set In dex(){File current = newFile( fpath + fname);if (files != null ){for (int i=0;i< files . length ;i++){if (current.equals( files [i])){fin dex = i;}}}}public void validateButton(){previous .setEnabled(( files != null ) && ( findex > 0));next .setEnabled(( files != null ) && ( findex <(files . length -1))); }}五.运行调试与分析讨论5.1.将同一目录下的图片按缩略图打开5.2. 单张打开图片[4?| Pirtur^Viewer - [979&_top.jpg] .厂且—vs—5.3.按”上一张”,”下一张”按钮打开图片I _ P'<tur<-Vrewer - [956S_top.jpg]d I回l-a・T选择图片[王二乘I|六.设计体会与小结我通过这次编程实践学习到了Image和Griphics相关的类的使用。

Java课程设计—图片浏览器

Java课程设计—图片浏览器

黔南师院计科系实验报告《易木图片浏览器》——《Java程序设计》课程设计报告系别: 计算机科学系班级: B11计科班学生姓名:林元兵学生学号: 1108075150指导教师:罗刚设计日期: 2013 年 6月一、课程设计目的:1、复习、巩固Java语言的基础知识,进一步加深对Java的理解和掌握;2、将学习Java中的抽象概念与实际动手编程相结合,锻炼学生的分析解决实际问题的能力,培养正确的编程习惯和能力;3、培养学生自主学习能力、创新意识和创新能力。

二、课程设计要求:1、首先要对课程设计题目进行前期分析,规划好所要制作的类、需要实现的功能、需要编写哪些类来实现、类和类之间有什么关系(请对这部分内容进行简单叙述、可以使用UML图);2、完成的程序要进行相应的的测试,功能要完整,设计要合理,对测试出现的问题进行适当处理,使程序能正确运行;3、设计报告的写法要求:对本次设计/编程的大体思路进行文字描述,并摘抄关键语句;使用GUI编程的,将主要代表界面进行截图放于文档中,没有使用GUI编程的请画出类图,流程图等说明;对本次Java的学习和课程设计进行总结。

4、提交方式:设计报告文档电子版和源程序,统一交到班长或者学习委员处。

5、提交时间: 6月28日。

目录一、项目运行系统要求二、项目功能分析三、项目文件(类)说明3.1、PictureView类3.2、PictureViewWin类3.2.1、PictureViewWin()方法3.2.2、createTop()方法3.2.3、createCenter()方法3.24、createBottom()方法3.24、reSiziPicture()方法3.2.5、actionPerformed()方法3.3.6、run()方法3.3、ReName(内部类)3.4、musicPlay类3.4.1、musicPlay()方法3.4.2、actionPerformed()方法3.5、SettingWin类3.6、Help类四、项目演示五、总结一、项目运行系统要求在运行该程序前,必须先安装JDK,在源文件的的根目录下有jdk-6u16-windows-i586.exe文件,该文件为jdk1.6版本,安装好该文件后即可运行该程序。

java-swing编程(一个简单的图片查看器)

java-swing编程(一个简单的图片查看器)

图1图2图3图4图5图6怎么样,java swing可视化编程。

适合对java swing有所了解的java爱好者。

如果有兴趣就继续往下看,别见笑!包含的内容:1. 整个窗口为一个JFrame。

2. 最上方的JMenuBar。

3. 中间最大的那块区域——mainPanel。

4. 右侧边栏——rightPanel。

5. 底部的一栏——basePanel。

主要功能:JMenuBar里设置了两个菜单项——File和Help。

File里有打开文件、关闭文件和退出菜单项。

单击Open...或者按快捷键alt+O,弹出JFileChooser文件选择对话框,选择图片文件(这里支持jpg、jpeg、gif、tif、tiff和png五种格式)后,图片将在mainPanel里显示。

同一文件夹下的其他图片文件显示在rightPanel,如果图片很多可以出现滑动条。

basePanel 里有两个按钮和一个显示当前图片序号和图片总数的标签;按钮可以往上往下翻图片,主面板、右侧边栏和标签都会动态更新。

如果到了最后一张,“下一个”按钮被禁用;第一张时,“上一个”被禁用。

同理在右侧边栏里选图片其它地方也都可以动态更新。

点File里的Close时,会清空mainPanel,rightPanel和标签中显示的内容,禁用两个按钮,效果(如图1)就像是还没有打开文件一样。

点退出时关闭Frame,结束程序。

下面正式开始介绍程序。

注:这里所讲的和提供的源码稍有差异,有兴趣的可以结合文中给出的代码去编写自己的类。

程序分为四部分,分别为三个面板的建立。

最后组合在一起,放在一个JFrame里,加入菜单栏,各种监听器。

Part I 写主面板类——MainPanel可以从JPanel继承。

MainPanel相对与JPanel,多了一个图像显示的功能,所以里面一定要有获取图片的方法,还必须重载paintComponent方法。

关于paintComponent这我想多说一点。

软件工程-图片浏览器

软件工程-图片浏览器

软件工程-图片浏览器一、需求分析和概要设计1.1 目的图像是现代信息社会中最基本的信息,它使信息变得栩栩如生,更加符合人们的日常交流习惯,因此它成为人类获取和交换信息的主要来源。

相信每个编程爱好者都非常熟悉ACD See,它的缩略图察看功能和对种类繁多的图片文件的支持使它成为使用最广泛的图片浏览软件之一。

我们也可以设计一个类似于ACD See的简单图像浏览器。

因此本选题具有较好好的实用价值和意义。

1.2 实现功能1、利用Microsoft Visual C++ 6.0作为开发工具,使用MFC Application Framework作为软件的基本架构,设计并开发了一个图片浏览器;2、实现了对BMP格式的图片进行浏览等基本功能;3、利用图像处理中一些变换算法,可以显示当前文件上一张、下一张图片;4、能够连续放映当前文件夹下的所有图片,时间间隔用户指定,并且可以在图片浏览过程中随时终止浏览。

项目的开发背景说明、需求分析和概要设计说明书1.3 用户的特点对用户来说,此软件简单易用,用户只需稍微看下界面就可以进行操作。

二、UML图例2.1 用例图UML 用例图:绘图者与用例的关系图,此程序用例关系是:用户操作浏览器进行图片浏览。

图1 浏览器用例图2.2 状态图状态图是描述某一对象的状态转化的,它主要表现的是该对象的状态。

从状态图中可以看出,该对象在接受了外界的某种刺激之后,会做出什么样的反应。

描述的是一个对象的事情。

可以说是对类图的一种补充,帮助开发者完善某一类。

图2为浏览器的UML状态图。

2.3 UML类图类图在UML的9个图中占据了相当重要的地位。

类是具有相似结构、行为和关系的一组对象的描述符。

类是面向对象系统中最重要的构造块。

类图显示了一组类、接口、协作以及它们之间的关系。

类图是系统静态视图的一部分,它主要是用来描述软件系统的静态结构。

类图具有不同的抽象层次,即概念层、说明层和实现层。

类图用于描述一组类、接口、协作以及它们之间的静态关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.课程设计的任务及要求二.需求分析图形化界面(GUI)编程,编写一个图片浏览器程序可以支持““.GIF”,“.JPEG”,“.jpeg”,“.TGA”,“.JPG”,“.jpg”等格式,单张打开图片,可以将同一目录下的图片按缩略图打开按“上一张”“下一张”按钮可以显示相应图片。

运行Applet时,图像不是一气呵成的,因为方法不是吧图像完整的装入内存再显示的。

于此相反,方法创建一个线程,该线程与Applet的原有线程并发执行,一边装入一边显示,从而产生上了不联需显示的现象。

为了提高图像才显示效果,可以采用双缓冲技术:首先把图像装入内存,然后再显示在屏幕上。

三. 设计思路3.1界面设计选择图片按钮:主要用dir函数实现图片的遍历。

上一张,下一张:通过做标轴回调函数实现。

由于本软件为单机软件,不需要大量的数据读写和数据交换,实现上、下功能要求只能读取PictureBox控件当前加载的目录,读取当前路径,创建一维数组。

frame = new Frame("PictureViewer");Panel pb = new Panel();Button select = new Button("选择图片");previous = new Button("上一张");next = new Button("下一张");select.addActionListener(this);previous.addActionListener(this);3.2.图像加载:Applet常用来显示储存在文件中的图像,多数Applet使用的是GIF或JPEG 格式的图像文件。

需Applet加载图像只需首先定义Image对象,然后使用getImage()方法把图像和文件结合起来即可。

image_width = bi.getWidth(this);image_height = bi.getHeight(this);double image_proportion = 1.0 * image_height / image_width;System.out.println("image: w "+image_width+" ,h "+image_height+" ,p1 "+image_proportion);if(image_proportion > screen_proportion){image_height = screen_height;image_width = (int)(image_height / image_proportion);System.out.println(" p1>p0 w= "+image_width);}else{image_width = screen_width;image_height = (int)(image_width * image_proportion);System.out.println(" p0>p1 h= "+image_height); }四.详细设计4.1.程序设计流程图4.2.源程序代码package C;import java.io.File;import java.io.FilenameFilter;public class MyFilter implements FilenameFilter{private String[] extension;public MyFilter(){extension = new String[]{".jpg", ".JPG", ".gif", ".GIF", ".png", ".PNG", ".jpeg", ".JPEG"};}public MyFilter(String[] extension){this.extension = extension;}public boolean accept(File dir,String name){for(String s : extension){if(name.endsWith(s)){return true;}}return false;}}package C;import java.awt.*;import java.awt.event.*;import java.awt.image.*;public class MyCanvas extends Canvas implements ComponentListener{ /****/private static final long serialVersionUID = 1L;private BufferedImage bi;private Image im;private int image_width;private int image_height;public void setImage(BufferedImage bi){this.bi = bi;this.zoom();}public void paint(Graphics g){g.drawImage(im,(this.getWidth()-image_width)/2,(this.getHeight()-image_height)/2,this);}public void componentResized(ComponentEvent e){if(bi != null){System.out.println("resize!!");this.zoom();this.repaint();}}public void componentMoved(ComponentEvent e){}public void componentShown(ComponentEvent e){}public void componentHidden(ComponentEvent e){}public void zoom(){if(bi == null)return;int screen_width = this.getWidth();int screen_height = this.getHeight();double screen_proportion = 1.0 * screen_height / screen_width;System.out.println("screen: w "+screen_width+" ,h "+screen_height+" ,p0 "+screen_proportion);image_width = bi.getWidth(this);image_height = bi.getHeight(this);double image_proportion = 1.0 * image_height / image_width;System.out.println("image: w "+image_width+" ,h "+image_height+" ,p1 "+image_proportion);if(image_proportion > screen_proportion){image_height = screen_height;image_width = (int)(image_height / image_proportion);System.out.println(" p1>p0 w= "+image_width);}else{image_width = screen_width;image_height = (int)(image_width * image_proportion);System.out.println(" p0>p1 h= "+image_height);}im = bi.getScaledInstance(image_width,image_height,Image.SCALE_SMOOTH);}}package C;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.io.*;import javax.imageio.*;public class T implements ActionListener{private Frame frame;private MyCanvas mc ;private String fpath;private String fname;private File[] files;private int findex ;private FileDialog fd_load;private MyFilter filter;private Button previous ;private Button next ;public static void main( String args[]) throws Exception { new T().init();}public void init(){frame = new Frame("PictureViewer");Panel pb = new Panel();Button select = new Button("选择图片");previous = new Button("上一张");next = new Button("下一张");select.addActionListener(this);previous.addActionListener(this);next.addActionListener(this);pb.add(select);pb.add(previous);pb.add(next);mc = new MyCanvas();mc.setBackground(new Color(200,210,230));mc.addComponentListener(mc);frame.add(pb,"North");frame.add(mc,"Center");frame.setSize(360,360);frame.setLocation(400,200);frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);}});frame.setVisible(true);this.validateButton();filter = new MyFilter();fd_load = new FileDialog(frame,"打开文件",FileDialog.LOAD);fd_load.setFilenameFilter(filter);}public void actionPerformed(ActionEvent e){String command = e.getActionCommand();if(command.equals("选择图片")){fd_load.setVisible(true);fpath = fd_load.getDirectory();fname = fd_load.getFile();if((fpath != null) && (fname != null)){this.display(new File(fpath + fname));files = new File(fpath).listFiles(filter);this.setIndex();}}else if(command.equals("上一张")){findex--;if(findex<0)findex = 0;this.display(files[findex]);}else if(command.equals("下一张")){findex++;if(findex >= files.length)findex = files.length-1;this.display(files[findex]);}this.validateButton();}public void display(File f){try{BufferedImage bi = ImageIO.read(f);mc.setImage(bi);frame.setTitle("PictureViewer - [" + f.getName() + "]"); }catch(Exception e){e.printStackTrace();}mc.repaint();}public void setIndex(){File current = new File(fpath + fname);if(files != null){for(int i=0;i<files.length;i++){if(current.equals(files[i])){findex = i;}}}}public void validateButton(){previous.setEnabled((files!=null) && (findex > 0));next.setEnabled((files!=null) && (findex<(files.length-1))); }}五.运行调试与分析讨论5.1.将同一目录下的图片按缩略图打开5.2.单张打开图片5.3.按”上一张”,”下一张”按钮打开图片六. 设计体会与小结我通过这次编程实践学习到了Image和Griphics相关的类的使用。

相关文档
最新文档