本文实例讲述了Java实现的图像查看器。分享给大家供大家参考。具体如下:
1. MyCanvas.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package PictureViewer; import java.awt.*; import java.awt.event.*; import java.awt.image.*; public class MyCanvas extends Canvas implements ComponentListener{ 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); } } |
2. MyFilter.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package PictureViewer; 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 ; } } |
3. PictureViewer.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
package PictureViewer; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import javax.imageio.*; public class PictureViewer 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 PictureViewer().init(); } public void init(){ frame = new Frame( "PictureViewer" ); Panel pb = new Panel(); 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 ))); } } |
希望本文所述对大家的java程序设计有所帮助。