用java实现的顺序图片显示器,先说缺陷,图片无法自动缩放,同时图片无法居中显示,调了很久,调不出来。下面贴代码:
这个类用来获取目录下的图片,并将图片的地址放到List中。
public class GetImages {
public static List<String> getImages(String path){
List<String> images = new ArrayList<String>();
File file = new File(path);
if(file.isFile()){
images.add(file.getPath());
return images;
}
File[] list = file.listFiles();
//取得可读取的图像文件的后缀名:jpg、 bmp、wbmp、jpeg、png、gif
String[] extensions = ImageIO.getReaderFileSuffixes();
for(File f:list){
for(String str:extensions){
//判断是否为图像文件
if(f.getName().substring(f.getName().indexOf(".")+1).equals(str)){
images.add(f.getPath());
}
}
}
return images;
}
}
构造图形界面的类。
public class ShowImage extends JFrame{
JPanel panel,temp1,temp2;
JButton btn1,btn2;
JLabel label;
int i = 0;
private static final int DEFAULT_WIDTH = 600;
private static final int DEFAULT_HEIGHT = 400;
public ShowImage(){
}
public ShowImage(final List<String> images){
panel = new JPanel();
btn1 = new JButton("上一张");
btn2 = new JButton("下一张");
panel.add(btn1,BorderLayout.EAST);
panel.add(btn2,BorderLayout.WEST);
label = new JLabel();
label.setIcon(new ImageIcon(images.get(i)));
label.setVerticalAlignment(SwingConstants.CENTER);
this.add(label,BorderLayout.CENTER);
this.add(panel,BorderLayout.SOUTH);
/*
* temp1,temp2用来占据位置使label不要贴近窗口,大小可随意设置
* 因为BorderLayout默认使控件拉伸到最大,如果布局左右两边没有控件,中间的控件会将两边的位置也占满
*/
temp1 = new JPanel();
temp2 = new JPanel();
temp1.setSize(600, 400);
temp2.setSize(600, 400);
this.add(temp1,BorderLayout.WEST);
this.add(temp2,BorderLayout.EAST);
btn1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
//第一张时,设置为最后一张
if(i==0){
i = images.size()-1;
}else{
i--;
}
label.setIcon(new ImageIcon(images.get(i)));
}
});
btn2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
//最后一张时,设置为第一张
if(i==images.size()-1){
i = 0;
}else{
i++;
}
label.setIcon(new ImageIcon(images.get(i)));
}
});
this.setTitle("图片浏览器");
this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
最后一个是运行类。
public class Test {
public static void main(String[] args) {
ShowImage s = new ShowImage(GetImages.getImages("E:\\picture\\加藤惠"));//改为自己的目录
}
}
效果图: