为了账号安全,请及时绑定邮箱和手机立即绑定

想用java编写一个图片浏览器,请问该怎么实现?

想用java编写一个图片浏览器,请问该怎么实现?

莫回无 2022-10-12 15:11:22
用到布局取出文件夹中所有图片后 将图片放进网格布局中 每个网格显示6张图片 并且网格布局可以上下翻页 查看文件夹中所有的图片 然后 点击 ”大图浏览“ (网格布局中显示的)用卡片布局 进行单个图浏览 并且可以上下翻页
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

稍麻烦一点,
下午给出代码

-------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
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.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;

public class ImageView extends JFrame {

private boolean isSingle = true;
private JPanel panel = new JPanel();
private CardLayout card = null;
private File[] files = null;
private int fileIndex = 0;
private JPanel single = new JPanel();
private JPanel multiple = new JPanel();

public ImageView() {

setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(600, 450);
setResizable(false);
getContentPane().setLayout(null);

card = new CardLayout(0, 0);
panel.setLayout(card);
panel.setBounds(12, 46, 570, 328);
getContentPane().add(panel);

panel.add(single, "single");
single.setLayout(new BorderLayout(0, 0));

panel.add(multiple, "multiple");
multiple.setLayout(new GridLayout(2, 3, 0, 0));

JButton btnBrowse = new JButton("Browse...");
btnBrowse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
chooser.setMultiSelectionEnabled(true);
int returnVal = chooser.showOpenDialog(getContentPane());
if (returnVal == JFileChooser.APPROVE_OPTION) {
files = chooser.getSelectedFiles();
showPicture();
}
}
});
btnBrowse.setBounds(12, 10, 91, 21);
getContentPane().add(btnBrowse);

JButton btnSingle = new JButton("single");
btnSingle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
isSingle = true;
card.show(panel, "single");
showPicture();
}
});
btnSingle.setBounds(115, 10, 91, 21);
getContentPane().add(btnSingle);

JButton btnMultiple = new JButton("multiple");
btnMultiple.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
isSingle = false;
card.show(panel, "multiple");
showPicture();
}
});
btnMultiple.setBounds(218, 10, 91, 21);
getContentPane().add(btnMultiple);

JButton btnPrevious = new JButton("previous");
btnPrevious.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (isSingle) {
fileIndex -= 1;
} else {
fileIndex -= 6;
}
showPicture();
}
});
btnPrevious.setBounds(92, 384, 91, 21);
getContentPane().add(btnPrevious);

JButton btnNext = new JButton("next");
btnNext.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (isSingle) {
fileIndex += 1;
} else {
fileIndex += 6;
}
showPicture();
}
});
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screenSize.width - getWidth()) / 2,
(screenSize.height - getHeight()) / 2);
btnNext.setBounds(423, 384, 91, 21);
getContentPane().add(btnNext);
setVisible(true);
}

private void showPicture() {

if (files == null || files.length == 0) {
return;
}
if (fileIndex > files.length || fileIndex < 0) {
fileIndex = 0;
}
PicturePanel canvas = null;
if (isSingle) {
if (single.getComponentCount() > 0) {
canvas = (PicturePanel) single.getComponent(0);
} else {
canvas = new PicturePanel();
single.add(canvas, BorderLayout.CENTER);
}
canvas.setPath(files[fileIndex].getPath());
canvas.repaint();
single.repaint();
} else {

for (int i = 0; i < 6; i++) {
if (files.length == fileIndex + i) {
break;
}

if (multiple.getComponentCount() > i) {
canvas = (PicturePanel) multiple.getComponent(i);
} else {
canvas = new PicturePanel();
multiple.add(canvas);
}
canvas.setPath(files[fileIndex + i].getPath());
canvas.repaint();
multiple.repaint();
}
}

panel.updateUI();
}

public static void main(String[] args) {
new ImageView();
}
}

class PicturePanel extends JPanel {

private Image image;

public PicturePanel() {
}

public void setPath(String filename) {
ImageIcon icon = new ImageIcon(filename);
this.image = icon.getImage();
}

public void paint(Graphics g) {
super.paint(g);
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, 400, 300, this);
}
}


查看完整回答
反对 回复 2022-10-16
?
偶然的你

TA贡献1841条经验 获得超3个赞

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<String> 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() {
this.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<String>();

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();
}
}
}
}


查看完整回答
反对 回复 2022-10-16
  • 2 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信