昨天写了个图片浏览器,很简单,主要就是用一个JFileChooser导入一个文件,然后在文件父目录下导入下一个 或者上一个图像。 东西做好了,但是还有一个问题,就是我界面图片的路径设置有问题,在打成Jar包后就不能正常显示我的UI图片了。留着以后再解决吧。
package ImageScanner;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
public class ImageScanner extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ImageScanner();
}
private JLabel ImageLabel;
private JPanel mainPanel;
private JPanel btnPanel;
private JButton PrevImagebtn;
private JButton InsertImagebtn;
private JButton NextImagebtn;
private JFileChooser fc = new JFileChooser();;
private File file = null;
private File[] parentfiles;
private int ImageIndex = 0;
ImageIcon img1 = new ImageIcon(getClass().getResource("./Image/BACKGROUNDS_GE_1.png"));
ImageIcon Jimg = new ImageIcon(img1.getImage().getScaledInstance(
800, 600, 4));
public ImageScanner() throws HeadlessException {
super();
Toolkit tk = Toolkit.getDefaultToolkit();
this.setLocation((tk.getScreenSize().width - 800) / 2, (tk
.getScreenSize().height - 750) / 2);
this.setSize(800, 700);
this.getContentPane().setLayout(null);
this.setTitle("图片浏览器");
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
btnPanelInit();
PanelInit();
this.add(mainPanel);
this.add(btnPanel);
}
private void PanelInit() {
mainPanel = new JPanel();
mainPanel.setBounds(0, 0, 800, 600);
mainPanel.setLayout(null);
ImageLabel = new JLabel();
ImageLabel.setIcon(Jimg);
ImageLabel.setBounds(0, 0, 800, 600);
mainPanel.add(ImageLabel);
}
private void btnPanelInit() {
btnPanel=new JPanel() {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void paint(Graphics g) {
ImageIcon icon=new ImageIcon(getClass().getResource("./Image/BACKGROUNDS_MAIN_1.png"));
g.drawImage(icon.getImage(),0,0,800,90,null);
super.paint(g);
}
};
btnPanel.setOpaque(false);
btnPanel.setLayout(new FlowLayout());
btnPanel.setBounds(0, 600, 800, 100);
PrevImagebtn=new JButton("前一张");
InsertImagebtn = new JButton("打开图片");
NextImagebtn = new JButton("下一张");
PrevImagebtn.setIcon(new ImageIcon( getClass().getResource("./Image/prev.png")));
NextImagebtn.setIcon(new ImageIcon(getClass().getResource("./Image/next.png")));
btnPanel.add(PrevImagebtn);
btnPanel.add(InsertImagebtn);
btnPanel.add(NextImagebtn);
InsertImagebtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
fc.setAcceptAllFileFilterUsed(false);
fc.setCurrentDirectory(new File("D:\\Picture"));
fc.addChoosableFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
return Filefiteraccept(f);
}
@Override
public String getDescription() {
return "JPG ,PNG or GIF Images";
}
});
int returnVal = fc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
if (file != null) {
InsertImage(file);
setTitle(file.getName());
}
}
}
});
NextImagebtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (file != null) {
if (file.getParentFile() != null)
parentfiles = file.getParentFile().listFiles(
new java.io.FileFilter() {
@Override
public boolean accept(File pathname) {
return Filefiteraccept(pathname);
}
});
for (int i = 0; i < parentfiles.length - 1; i++) {
if (parentfiles[i].getName().equalsIgnoreCase(
file.getName()))
ImageIndex = i + 1;
}
InsertImage(parentfiles[ImageIndex]);
setTitle(parentfiles[ImageIndex].getName());
file = parentfiles[ImageIndex];
if (ImageIndex == parentfiles.length-2){
JOptionPane.showMessageDialog(null, "没有下一张了", "提示",
JOptionPane.ERROR_MESSAGE);
setTitle("图片浏览器");
}
}
}
});
PrevImagebtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (file != null) {
if (ImageIndex == -1){
JOptionPane.showMessageDialog(null, "这是第一张了", "提示",
JOptionPane.ERROR_MESSAGE);
setTitle("图片浏览器");
}
else if (file.getParentFile() != null)
parentfiles = file.getParentFile().listFiles(
new java.io.FileFilter() {
@Override
public boolean accept(File pathname) {
return Filefiteraccept(pathname);
}
});
for (int i = 0; i < parentfiles.length - 1; i++) {
if (parentfiles[i].getName().equalsIgnoreCase(
file.getName()))
ImageIndex = i - 1;
}
InsertImage(parentfiles[ImageIndex]);
setTitle(parentfiles[ImageIndex].getName());
file = parentfiles[ImageIndex];
}
}
});
}
public void InsertImage(File f) {
ImageIcon img = new ImageIcon(f.getAbsolutePath());
ImageIcon JLabelimg = new ImageIcon(img.getImage().getScaledInstance(
800, 600, 4));
ImageLabel.setIcon(JLabelimg);
}
public boolean Filefiteraccept(File f) {
int index = 0;
for (int i = 0; i < f.getName().length(); i++)
if (f.getName().charAt(i) == '.')
index = i;
String type = f.getName().substring(index);
if (type.equals(".jpg"))
return true;
else if (type.equals(".png"))
return true;
else if (type.equals(".gif"))
return true;
else if (f.isDirectory())
return true;
else
return false;
}
}