📄 fullscreenwindow.java
字号:
package org.net9.oops.jsee;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import javax.swing.event.*;
//import java.io.*;
//import java.util.*;
public class FullScreenWindow extends JWindow {
ImageIcon splashIm;
Dimension screenDim;
JLabel label;
// JScrollPane pane;
ViewerScrollPane pane;
JViewport viewport;
boolean Open_Next_Image = false;
boolean Open_Previous_Image = false;
final Jsee dummy;
JPopupMenu menu;
SlideShow sthread;
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
JScrollBar vbar, hbar;
int lastMouseY, lastMouseX;
float zooming = 1;
Cursor handCursor, defaultCursor;
//popup menu
JMenuItem slideshow_item;
JMenuItem stop_slideshow_item;
public class SlideShow extends Thread {
long minSlide;
boolean foward;
public SlideShow(long min, boolean f) {
minSlide = min;
foward = f;
}
public void run() {
while (true) {
try {
if (!OpenNextImage(dummy.GetNextImage(), foward))
this.stop();
Thread.sleep(minSlide);
} catch (InterruptedException i) {/*continue;*/}
}
}
}
/*
public FullScreenWindow(JCDSee parent, String filename) {
super(parent);
dummy = parent;
// splashIm = parent.Load_Image(filename);
PlanarImage src = JAI.create("fileload", filename);
try {
splashIm = new ImageIcon(src.getAsBufferedImage());
} catch (RuntimeException re) {
FileInputStream inStream;
try {
//inStream = new FileInputStream(filename);
splashIm = new ImageIcon(PcxReader102V01.loadImage(new FileInputStream(filename)));
} catch (FileNotFoundException e) {}
catch (NullPointerException npe) {}
if (splashIm.getIconHeight() < 0) {
System.out.println("This is not an image file or not supported by JAI");
return;
}
}
init();
}
*/
public FullScreenWindow(Jsee parent, ImageIcon imageicon) {
super(parent);
dummy = parent;
splashIm = imageicon;
init();
}
public void init() {
screenDim = Toolkit.getDefaultToolkit().getScreenSize();
setSize((int)screenDim.getWidth(),(int)screenDim.getHeight());
// setForeground(Color.black);
// label = new JLabel( splashIm );
pane = new ViewerScrollPane( splashIm );
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
handCursor = new Cursor(Cursor.HAND_CURSOR);
defaultCursor = new Cursor(Cursor.DEFAULT_CURSOR);
final int imageHeight = splashIm.getIconHeight();
final int imageWidth = splashIm.getIconWidth();
// set cursor if image is scrollable
if (imageWidth > screenDim.getWidth() || imageHeight > screenDim.getHeight())
{ // mean the image is larger than screen size
setCursor(handCursor);
}
else {
setCursor(defaultCursor);
}
// end cursor
// doing the key scroll
vbar = pane.getVerticalScrollBar();
hbar = pane.getHorizontalScrollBar();
addKeyListener( new Listen() );
// menu section
menu = new JPopupMenu();
final JMenuItem NextImage_item = new JMenuItem("Next Image", new ImageIcon(getClass().getResource("image/nextImage.gif")));
final JMenuItem PreviousImage_item = new JMenuItem("Previous Image", new ImageIcon(getClass().getResource("image/previousImage.gif")));
final JMenuItem ZoomIn_item = new JMenuItem("Zoom in", new ImageIcon(getClass().getResource("image/ZoomIn.gif")));
final JMenuItem ZoomOut_item = new JMenuItem("Zoom out", new ImageIcon(getClass().getResource("image/ZoomOut.gif")));
final JMenuItem Rotate_item = new JMenuItem("Rotate", new ImageIcon(getClass().getResource("image/rotate.gif")));
final JMenuItem hflip_item = new JMenuItem("Horizontal flip", new ImageIcon(getClass().getResource("image/hflip.gif")));
final JMenuItem vflip_item = new JMenuItem("Vertical flip", new ImageIcon(getClass().getResource("image/vflip.gif")));
final JMenuItem Close_item = new JMenuItem("Close");
slideshow_item = new JMenuItem("Run slide show", new ImageIcon(getClass().getResource("/image/play.gif")));
stop_slideshow_item = new JMenuItem("Stop slide show", new ImageIcon(getClass().getResource("/image/stop.gif")));
stop_slideshow_item.setEnabled(false);
final JMenuItem exit_item = new JMenuItem("Quit JCDSee");
final JCheckBoxMenuItem Fullscreen_item = new JCheckBoxMenuItem("Full Screen", true);
NextImage_item.addActionListener(
// open the next image on file list
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
OpenNextImage(dummy.GetNextImage(), true);
}
}
);
Close_item.addActionListener(
// put current image into frame view
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
dummy.show();
dispose();
// when close fullscreen window, select the file that currently display.
dummy.SelectCurrentFile();
}
}
);
PreviousImage_item.addActionListener(
// open the previous image on list
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
OpenNextImage(dummy.GetPreviousImage(), false);
}
}
);
ZoomIn_item.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
if (!pane.Zoom(true))
ZoomIn_item.setEnabled(false);
else
ZoomOut_item.setEnabled(true);
}
}
);
ZoomOut_item.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
if (!pane.Zoom(false))
ZoomOut_item.setEnabled(false);
else
ZoomIn_item.setEnabled(true);
}
}
);
exit_item.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
dummy.Quit();
}
}
);
slideshow_item.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
Run_Slide_Show();
}
}
);
stop_slideshow_item.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
sthread.stop();
slideshow_item.setEnabled(true);
stop_slideshow_item.setEnabled(false);
}
}
);
Fullscreen_item.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event ) {
if ( !Fullscreen_item.getState() )
{
dummy.ViewFullScreen(false);
dummy.vw = new ViewerWindow(pane, dummy);
dummy.vw.show();
dummy.hide();
dispose();
}
}
}
);
Rotate_item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event)
{
pane.RotateImage();
}
});
hflip_item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event)
{
pane.FlipImage(false);
}
});
vflip_item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event)
{
pane.FlipImage(true);
}
});
menu.add(NextImage_item);
menu.add(PreviousImage_item);
menu.add(ZoomIn_item);
menu.add(ZoomOut_item);
menu.add(Fullscreen_item);
menu.add(slideshow_item);
menu.add(stop_slideshow_item);
menu.add(Rotate_item);
menu.add(hflip_item);
menu.add(vflip_item);
menu.add(Close_item);
menu.add(exit_item);
getContentPane().add(menu);
// add mouse listener for window
addMouseMotionListener(
new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
label_mouseDragged(e);
}
}
);
pane.addMouseListener(
new MouseListener() {
public void mouseClicked( MouseEvent event ) {
if (event.getClickCount() == 2) {
dummy.show();
dispose();
}
}
public void mousePressed( MouseEvent event ) {
PopupTriggered(event);
}
public void mouseReleased( MouseEvent event ) {
PopupTriggered(event);
}
public void mouseEntered( MouseEvent event ) {}
public void mouseExited( MouseEvent event ) {}
}
);
// end the add listener section
/* Center the window */
Rectangle winDim = getBounds();
setLocation((screenDim.width - winDim.width) / 2,
(screenDim.height - winDim.height) / 2);
getContentPane().add(pane);
pane.reshape(0,0,screenDim.width, screenDim.height);
show(true);
}
public boolean OpenNextImage( String imageFileName, boolean down ) {
if (imageFileName != null) {
splashIm = dummy.Load_Image(imageFileName);
while (splashIm.getIconWidth() < 0) { // this is not an image
if (down) {
if (dummy.GetNextImage() == null) {
dispose();
break;
}
else
splashIm = dummy.Load_Image(dummy.GetNextImage());
}
else
splashIm = dummy.Load_Image(dummy.GetPreviousImage());
}
screenDim = Toolkit.getDefaultToolkit().getScreenSize();
setSize((int)screenDim.getWidth(),(int)screenDim.getHeight());
// setForeground(Color.black);
label = new JLabel( splashIm );
pane.loadNewImage(splashIm);
if (splashIm.getIconWidth() > screenDim.getWidth() || splashIm.getIconHeight() > screenDim.getHeight())
{ // mean the image is larger than screen size
setCursor(handCursor);
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
}
else {
setCursor(defaultCursor);
}
viewport = new JViewport();
viewport.setView(label);
pane.setViewport(viewport);
getContentPane().validate();
return true;
} else {
dispose();
dummy.show();
return false;
}
}
public void Run_Slide_Show() {
sthread = new SlideShow(dummy.slideShowDelayTime*1000, dummy.slideShowForward);
sthread.start();
stop_slideshow_item.setEnabled(true);
slideshow_item.setEnabled(false);
}
void label_mouseDragged(MouseEvent e) {
int mouseY = e.getY();
int mouseX = e.getX();
if (mouseY > lastMouseY) {
vbar.setValue(vbar.getValue() - vbar.getBlockIncrement());
if (mouseX > lastMouseX)
hbar.setValue(hbar.getValue() - hbar.getBlockIncrement());
else if (mouseX < lastMouseX)
hbar.setValue(hbar.getValue() + hbar.getBlockIncrement());
}
else if (mouseY < lastMouseY) {
vbar.setValue(vbar.getValue() + vbar.getBlockIncrement());
if (mouseX > lastMouseX)
hbar.setValue(hbar.getValue() - hbar.getBlockIncrement());
else if (mouseX < lastMouseX)
hbar.setValue(hbar.getValue() + hbar.getBlockIncrement());
}
lastMouseY = mouseY;
lastMouseX = mouseX;
}
void PopupTriggered(MouseEvent e) {
lastMouseY = e.getY();
lastMouseX = e.getX();
if ( e.isPopupTrigger() )
{
int x = e.getX();
int y = e.getY();
// if click point is too closed to the edge of screen
if (x >= (int)d.getWidth() - 117)
x = (int)d.getWidth() - 117;
if (y >= (int)d.getHeight() - 92)
y = (int)d.getHeight() - 92;
menu.show(pane, x, y);
}
}
class Listen extends KeyAdapter{
public void keyPressed(KeyEvent e){
if ( e.getKeyCode()==KeyEvent.VK_UP ){
vbar.setValue(vbar.getValue() - vbar.getBlockIncrement());
}
else if ( e.getKeyCode()==KeyEvent.VK_DOWN ){
vbar.setValue(vbar.getValue() + vbar.getBlockIncrement());
}
else if ( e.getKeyCode()==KeyEvent.VK_LEFT ){
hbar.setValue(hbar.getValue() - hbar.getBlockIncrement());
}
else if ( e.getKeyCode()==KeyEvent.VK_RIGHT ){
hbar.setValue(hbar.getValue() + hbar.getBlockIncrement());
}
else if ( e.getKeyCode() == KeyEvent.VK_ESCAPE )
{
dummy.show();
dispose();
}
else if ( e.getKeyCode() == KeyEvent.VK_PAGE_DOWN )
{
OpenNextImage(dummy.GetNextImage(), true);
}
else if ( e.getKeyCode() == KeyEvent.VK_PAGE_UP )
{
OpenNextImage(dummy.GetPreviousImage(), false);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -