📄 imageviewer.java
字号:
/*
* Copyright (c) 2002-2008 TeamDev Ltd. All rights reserved.
*
* Use is subject to license terms.
*
* The complete licence text can be found at
* http://www.teamdev.com/winpack/license.jsf
*/
package teamdev.jxcapture.samples.demo;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
import java.util.ResourceBundle;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
/**
* @author Ikryanov Vladimir
*/
public class ImageViewer extends JFrame {
private static final String ZOOM_IN_PROPERTY = "zoomInEnabled";
private static final String ZOOM_OUT_PROPERTY = "zoomOutEnabled";
private ResourceBundle resource = ApplicationSettings.getResourceBundle();
private Actions.OpenImageAction openAction = new Actions.OpenImageAction(ImageViewer.class);
private SaveAction saveAction = new SaveAction();
private CloseAction closeAction = new CloseAction();
private ZoomInAction zoomInAction = new ZoomInAction();
private ZoomOutAction zoomOutAction = new ZoomOutAction();
private ZoomToAction zoomToAction = new ZoomToAction();
private ActualSizeAction actualSizeAction = new ActualSizeAction();
private FitToWindowAction fitToWindowAction = new FitToWindowAction();
private CopyAction copyAction = new CopyAction();
private SettingsAction settingsAction = new SettingsAction();
private AboutAction aboutAction = new AboutAction();
private ImageComponent imageComponent;
private JButton zoomToButton;
private File imageFile;
private boolean zoomInEnabled = true;
private boolean zoomOutEnabled = true;
private boolean imageModified = false;
private List percentActions = new LinkedList();
private JPopupMenu zoomToPopupMenu = new JPopupMenu();
public ImageViewer() throws HeadlessException {
setSize(750, 500);
setLocationRelativeTo(null);
updateTitle(null);
URL imageURL = getClass().getResource("resources/images/JxCapture.png");
setIconImage(new ImageIcon(imageURL).getImage());
createMenuBar();
createContentPane();
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if (propertyName.equals(ZOOM_IN_PROPERTY)) {
zoomInAction.setEnabled(((Boolean)evt.getNewValue()).booleanValue());
} else if (propertyName.equals(ZOOM_OUT_PROPERTY)) {
zoomOutAction.setEnabled(((Boolean)evt.getNewValue()).booleanValue());
}
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
close();
}
});
}
public void updateTitle(String fileName) {
String titleValue = fileName == null ? "" : " - " + fileName;
setTitle(resource.getString(ImageViewer.class.getName() + ".Title") + titleValue);
}
private void createMenuBar() {
JMenuItem openMenuItem = new JMenuItem(openAction);
JMenuItem saveMenuItem = new JMenuItem(saveAction);
JMenuItem closeMenuItem = new JMenuItem(closeAction);
JMenuItem zoomInMenuItem = new JMenuItem(zoomInAction);
JMenuItem zoomOutMenuItem = new JMenuItem(zoomOutAction);
JMenuItem actualSizeMenuItem = new JMenuItem(actualSizeAction);
JMenuItem fitToWindowMenuItem = new JMenuItem(fitToWindowAction);
JMenuItem copyMenuItem = new JMenuItem(copyAction);
JMenuItem settingsMenuItem = new JMenuItem(settingsAction);
JMenuItem aboutMenuItem = new JMenuItem(aboutAction);
JMenu zoomToMenuItem = new JMenu(resource.getString(ImageViewer.class.getName() + ".Action.ZoomTo.Text"));
configZoomToMenu(zoomToMenuItem);
openMenuItem.setIcon(getIcon("OpenImage", "Menu"));
saveMenuItem.setIcon(getIcon("Save", "Menu"));
closeMenuItem.setIcon(getIcon("Close", "Menu"));
zoomInMenuItem.setIcon(getIcon("ZoomIn", "Menu"));
zoomOutMenuItem.setIcon(getIcon("ZoomOut", "Menu"));
zoomToMenuItem.setIcon(getIcon("ZoomTo", "Menu"));
copyMenuItem.setIcon(getIcon("Copy", "Menu"));
settingsMenuItem.setIcon(getIcon("Settings", "Menu"));
JMenu fileMenu = new JMenu(resource.getString(ImageViewer.class.getName() + ".Menu.FileMenu.Text"));
JMenu viewMenu = new JMenu(resource.getString(ImageViewer.class.getName() + ".Menu.ViewMenu.Text"));
JMenu editMenu = new JMenu(resource.getString(ImageViewer.class.getName() + ".Menu.EditMenu.Text"));
JMenu settingsMenu = new JMenu(resource.getString(ImageViewer.class.getName() + ".Menu.SettingsMenu.Text"));
JMenu helpMenu = new JMenu(resource.getString(ImageViewer.class.getName() + ".Menu.HelpMenu.Text"));
fileMenu.add(openMenuItem);
fileMenu.add(saveMenuItem);
fileMenu.addSeparator();
fileMenu.add(closeMenuItem);
viewMenu.add(zoomInMenuItem);
viewMenu.add(zoomOutMenuItem);
viewMenu.add(zoomToMenuItem);
viewMenu.addSeparator();
viewMenu.add(actualSizeMenuItem);
viewMenu.add(fitToWindowMenuItem);
editMenu.add(copyMenuItem);
settingsMenu.add(settingsMenuItem);
helpMenu.add(aboutMenuItem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
menuBar.add(viewMenu);
menuBar.add(editMenu);
menuBar.add(settingsMenu);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
}
private Icon getIcon(String actionName, String contentType) {
String imageName = resource.getString(ImageViewer.class.getName() + ".Action." + actionName + "." + contentType + ".Icon");
URL imageURL = ImageViewer.class.getResource(imageName);
return new ImageIcon(imageURL);
}
private JToolBar createToolBar() {
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
toolBar.setBorderPainted(false);
toolBar.add(createToolBarButton(openAction, "OpenImage"));
toolBar.add(createToolBarButton(saveAction, "Save"));
toolBar.addSeparator();
toolBar.add(createToolBarButton(copyAction, "Copy"));
toolBar.addSeparator();
toolBar.add(createToolBarButton(zoomInAction, "ZoomIn"));
toolBar.add(createToolBarButton(zoomOutAction, "ZoomOut"));
toolBar.add(createZoomToButton());
toolBar.addSeparator();
toolBar.add(createToolBarButton(settingsAction, "Settings"));
return toolBar;
}
private JButton createToolBarButton(AbstractAction action, String actionName) {
JButton button = new JButton();
button.setBorder(new EmptyBorder(5, 5, 5, 5));
button.setVerticalTextPosition(JButton.BOTTOM);
button.setHorizontalTextPosition(JButton.CENTER);
button.setAction(action);
button.setIcon(getIcon(actionName, "Button"));
button.setFocusable(false);
return button;
}
private ImageComponent getImageComponent() {
return imageComponent == null ? imageComponent = new ImageComponent() : imageComponent;
}
private JButton createZoomToButton() {
zoomToButton = createToolBarButton(zoomToAction, "ZoomTo");
zoomToPopupMenu.add(new JMenuItem(actualSizeAction));
zoomToPopupMenu.add(new JMenuItem(fitToWindowAction));
zoomToPopupMenu.addSeparator();
List zoomToActions = getZoomToActions();
for (int i = 0; i < zoomToActions.size(); i++) {
PercentAction action = (PercentAction) zoomToActions.get(i);
zoomToPopupMenu.add(new JMenuItem(action));
}
zoomToPopupMenu.addPopupMenuListener(new PopupMenuListener() {
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
zoomToButton.setSelected(true);
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
zoomToButton.setSelected(false);
}
public void popupMenuCanceled(PopupMenuEvent e) {
}
});
return zoomToButton;
}
private void configZoomToMenu(JMenu menu) {
java.util.List zoomToActions = getZoomToActions();
for (int i = 0; i < zoomToActions.size(); i++) {
PercentAction action = (PercentAction) zoomToActions.get(i);
menu.add(new JMenuItem(action));
}
}
private java.util.List getZoomToActions() {
if (percentActions == null || percentActions.isEmpty()) {
int[] percents = getImageComponent().getPercents();
for (int i = 0; i < percents.length; i++) {
percentActions.add(new PercentAction(percents[i], i));
}
}
return percentActions;
}
private void createContentPane() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.add(createToolBar(), BorderLayout.NORTH);
contentPane.add(new JScrollPane(getImageComponent()), BorderLayout.CENTER);
setContentPane(contentPane);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -