⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageviewer.java

📁 Java版本的屏幕截图 工具,可以自己放到系统托盘使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -