java 图片浏览器_用java编写一个图片浏览器

展开全部

import java.awt.BorderLayout;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.util.ArrayList;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

public class ImageGallery extends JFrame implements ActionListener {

public static final int G_WIDTH = 400, G_HEIGHT = 620;

public static final int L_WIDTH = 1200, L_HEIGHT = 520;

public static final int MAX_R = 3, MAX_C = 2;

public static final int GRID = 1, LARGE = 2;

private JFileChooser chooser;

private JMenuBar toolBar;

private JMenu menu;

private JMenuItem open;

private ArrayList paths;

private JPanel showingPanel, buttonPanel;

private int page = 1;

private int count = 0;

private int showType = GRID;

private int pageMax;

private JButton last, next, large, grid;

public ImageGallery() {

32313133353236313431303231363533e4b893e5b19e31333330323239this.setTitle("Image gallery 0.1");

this.setBounds(100, 100, G_WIDTH, G_HEIGHT);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

toolBar = new JMenuBar();

chooser = new JFileChooser();

chooser.setCurrentDirectory(new java.io.File("."));

chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

menu = new JMenu("File");

toolBar.add(menu);

open = new JMenuItem("open");

open.addActionListener(this);

menu.add(open);

paths = new ArrayList();

this.setJMenuBar(toolBar);

showingPanel = new JPanel();

buttonPanel = new JPanel();

last = new JButton("last");

last.addActionListener(this);

next = new JButton("next");

next.addActionListener(this);

large = new JButton("large");

large.addActionListener(this);

grid = new JButton("grid");

grid.addActionListener(this);

buttonPanel.add(last);

buttonPanel.add(large);

buttonPanel.add(grid);

buttonPanel.add(next);

this.add(buttonPanel, BorderLayout.SOUTH);

this.add(showingPanel);

this.setVisible(true);

}

public void doOpen() {

int result = chooser.showOpenDialog(null);

if (result == JFileChooser.APPROVE_OPTION) {

String directory = chooser.getSelectedFile().getPath();

this.getAllImage(directory);

for (String s : this.paths) {

System.out.println(s);

}

this.showingImage();

}

}

public void getAllImage(String directory) {

paths.clear();

page = 1;

count = 0;

File file = new File(directory);

if (file.isDirectory()) {

String[] list = file.list();

for (String s : list) {

String path = directory + "\\" + s;

File temp = new File(path);

if (!temp.isDirectory()) {

this.paths.add(path);

}

}

}

}

public void changePage(int page) {

if (!paths.isEmpty()) {

switch (showType) {

case GRID:

this.page += page;

if (this.page == 0) {

this.page = 1;

}

if (this.page > pageMax) {

this.page = pageMax;

}

break;

case LARGE:

this.count += page;

if (count < 0) {

count = 0;

}

if (count > paths.size() - 1) {

count = paths.size() - 1;

}

break;

}

this.showingImage();

}

}

public void showingImage() {

this.remove(showingPanel);

showingPanel = new JPanel();

int size = paths.size();

int max = MAX_R * MAX_C;

pageMax = (size % max == 0 ? size / max : size / max + 1);

switch (showType) {

case GRID:

this.setBounds(100, 100, G_WIDTH, G_HEIGHT);

showingPanel.setLayout(new GridLayout(MAX_R, MAX_C - 1));

int i = (page - 1) * max;

int j = page * max;

for (; i < j && i < size; i++) {

String path = paths.get(i);

showingPanel.add(new ImagePanel(path));

}

break;

case LARGE:

int left = count - 1;

int right = count + 1;

this.setBounds(100, 100, L_WIDTH, L_HEIGHT);

showingPanel.setLayout(new GridLayout(1, 2));

if (left >= 0) {

showingPanel.add(new ImagePanel(paths.get(left)));

} else {

showingPanel.add(new ImagePanel(""));

}

showingPanel.add(new ImagePanel(paths.get(count)));

if (right < size) {

showingPanel.add(new ImagePanel(paths.get(right)));

} else {

showingPanel.add(new ImagePanel(""));

}

break;

}

this.add(showingPanel, BorderLayout.CENTER);

showingPanel.updateUI();

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

new ImageGallery();

}

class ImagePanel extends JPanel {

private ImageIcon image;

ImagePanel(String path) {

image = new ImageIcon(path);

}

public ImageIcon getImageIcon() {

return this.image;

}

@Override

protected void paintComponent(Graphics g) {

// TODO Auto-generated method stub

g.drawImage(image.getImage(), 0, 0, this.getWidth(), this

.getHeight(), this);

}

}

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

String key = e.getActionCommand();

System.out.println(key);

if (key.equals("open")) {

doOpen();

} else if (key.endsWith("last")) {

changePage(-1);

} else if (key.endsWith("next")) {

changePage(1);

} else if (key.endsWith("large")) {

if (!paths.isEmpty()) {

count =0;

showType = LARGE;

showingImage();

}

} else if (key.endsWith("grid")) {

if (!paths.isEmpty()) {

page = 1;

showType = GRID;

showingImage();

}

}

}

}

本回答被提问者采纳

2Q==

c50d6af2748da18e06a2dc6d9597acd0.gif

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值