📄 media.java
字号:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Media extends JPanel {
public static void main(String[] args)
{
final JFrame frm = new JFrame("http://www.javaworld.com.tw/jute/post/view?bid=5&id=166668&sty=1&tpg=1&age=0");
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BufferedImage cover = new BufferedImage(72 * 3, 72, BufferedImage.TYPE_INT_RGB);
final Graphics g = cover.getGraphics();
g.setColor(Color.BLUE);
g.setFont(Font.decode("新細明體-PLAIN-64"));
g.drawString("幻燈片", 0, 48);
g.dispose();
final Media c = new Media(cover);
c.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e)
{
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (chooser.showOpenDialog(c) == JFileChooser.APPROVE_OPTION) {
c.slideShow(chooser.getSelectedFile());
}
}
});
frm.getContentPane().add(c);
final JLabel info = new JLabel("以滑鼠點擊視窗內部開啟對話盒以選取圖片檔案夾");
info.setForeground(Color.RED);
frm.getContentPane().add(info, BorderLayout.NORTH);
frm.setSize(800, 600);
frm.setVisible(true);
}
class FetchImage implements Runnable {
private File directory;
private boolean stop;
public FetchImage(File directory)
{
this.directory = directory;
}
public void stopFetching()
{
stop = true;
}
public void run()
{
final FileFilter filter = new FileFilter() {
public boolean accept(File pathname)
{
String name = pathname.getName().toLowerCase();
return name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".gif");
}
};
final Toolkit toolkit = Toolkit.getDefaultToolkit();
final File[] files = directory.listFiles(filter);
final MediaTracker tracker = new MediaTracker(Media.this);
int n = 0;
for (int i = 0; i < files.length && !stop; ++i) {
try {
Image image = toolkit.getImage(files[i].getCanonicalPath());
tracker.addImage(image, n);
tracker.waitForID(n++);
ig = image;
repaint();
Thread.sleep(3000);
}
catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private Image ig = null;
private Thread slideThread;
private FetchImage task;
public Media(Image image)
{
this.setBackground(Color.black);
ig = image;
}
public void paint(Graphics g)
{
// if (isOpaque()) {
// Graphics dc = g.create();
// dc.setColor(getBackground());
// dc.fillRect(0, 0, getWidth(), getHeight());
// dc.dispose();
// }
if (ig != null)
g.drawImage(ig, 0, 0, 270, 260, this);
}
public void slideShow(File dir)
{
if (slideThread != null && slideThread.isAlive()) {
task.stopFetching();
try {
slideThread.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
task = new FetchImage(dir);
slideThread = new Thread(task);
slideThread.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -