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

📄 editmenu.java

📁 一个用Java 造成的小画家
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package onlyfun.caterpillar.app.EasyJShop.menu;

import java.awt.Point;
import java.awt.Toolkit;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.beans.PropertyVetoException;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;

import onlyfun.caterpillar.app.EasyJShop.main.AbstractChild;
import onlyfun.caterpillar.app.EasyJShop.main.CanvasComponent;
import onlyfun.caterpillar.app.EasyJShop.main.ColorDemoBox;
import onlyfun.caterpillar.app.EasyJShop.main.IBatcher;
import onlyfun.caterpillar.dialog.FontDialog;
import onlyfun.caterpillar.dialog.ResizeDialog;
import onlyfun.caterpillar.image.ImageProcessor;
import onlyfun.caterpillar.image.TransferableImage;
import onlyfun.caterpillar.image.ClipboardHelper;

public class EditMenu extends AbstractChild {
    private ImageProcessor imageProcessor;
    private TransferableImage transferableImage;
    
    private ImageIcon selectIcon, brushIcon, textIcon, viewIcon, 
                      cutIcon, copyIcon, pasteIcon, cropIcon;
    
    private Cursor viewCursor;
    
    private JMenu editMenu;
    
    private JMenuItem undoMenuItem, redoMenuItem;
    private JMenuItem cutMenuItem, cropMenuItem;
    private JMenuItem copyMenuItem;
    private JMenuItem pasteMenuItem, pasteToNewMenuItem;
    private JMenuItem resizeMenuItem, horizontalMirrorMenuItem, verticalMirrorMenuItem;
    private JMenuItem clockwiseMenuItem, counterClockwiseMenuItem;
    private JMenuItem batchMenuItem;
    
    private JComboBox batchComboBox;
    
    private InternalFrameListener internalFrameListener;
    private MouseListener mouseListener;
    private MouseMotionListener mouseMotionListener;
    
    private JToolBar toolBar;
    private ColorDemoBox foreColorBox, backColorBox;
    private JSpinner brushSpinner;

    private JToggleButton selectBtn, brushBtn, textBtn, viewBtn;
    private JButton cutBtn, copyBtn, pasteBtn, cropBtn;
    
    private int editMode;
    private boolean resizeLocker;
    
    public EditMenu() {
        initResource();
        setupUIComponent();
        setupEventListener();
        
        Thread clipboradChecker = new Thread(new Runnable() {
            public void run() {
                while(true) {
                    try {
                        if(ClipboardHelper.getImageFromClipboard() == null) {
                            pasteMenuItem.setEnabled(false);
                            pasteToNewMenuItem.setEnabled(false);
                            pasteBtn.setEnabled(false);
                        }
                        else {
                            pasteToNewMenuItem.setEnabled(true);
                            
                            if(getDesktopPane() != null && getDesktopPane().getSelectedFrame() != null) {
                                pasteMenuItem.setEnabled(true);
                                pasteBtn.setEnabled(true);
                            }
                        }
                        
                        Thread.sleep(1000);
                    }
                    catch(InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        
        clipboradChecker.start();
    }
    
    private void initResource() {
        imageProcessor = new ImageProcessor();
        transferableImage = new TransferableImage();
        
        selectIcon = new ImageIcon(EditMenu.class.getResource("images/select.gif"));
        brushIcon = new ImageIcon(EditMenu.class.getResource("images/brush.gif"));
        textIcon = new ImageIcon(EditMenu.class.getResource("images/text.gif"));
        viewIcon = new ImageIcon(EditMenu.class.getResource("images/view.gif"));
        viewCursor = Toolkit.getDefaultToolkit().createCustomCursor(
                viewIcon.getImage(), new Point(0, 0), "magnifier");
        cutIcon = new ImageIcon(EditMenu.class.getResource("images/cut.gif"));
        copyIcon = new ImageIcon(EditMenu.class.getResource("images/copy.gif"));
        pasteIcon = new ImageIcon(EditMenu.class.getResource("images/paste.gif"));
        cropIcon = new ImageIcon(EditMenu.class.getResource("images/crop.gif"));
    }
    
    private void setupUIComponent() {
        // set up menuitem
        editMenu = new JMenu("Edit");
        
        undoMenuItem = new JMenuItem("Undo");
        redoMenuItem = new JMenuItem("Redo");
        
        cutMenuItem = new JMenuItem("Cut");
        copyMenuItem = new JMenuItem("Copy");
        pasteMenuItem = new JMenuItem("Into current");
        
        
        pasteToNewMenuItem = new JMenuItem("To new");
        cropMenuItem = new JMenuItem("Crop");
        
        resizeMenuItem = new JMenuItem("Resize");
        horizontalMirrorMenuItem = new JMenuItem("Horizontal mirror");
        verticalMirrorMenuItem = new JMenuItem("Vertical mirror");
        clockwiseMenuItem = new JMenuItem("Rotate clockwise");
        counterClockwiseMenuItem = new JMenuItem("Rotate counter-clockwise");
        batchMenuItem = new JMenuItem("Batch..");
        
        editMenu.add(undoMenuItem);
        editMenu.add(redoMenuItem);
        editMenu.addSeparator();
        
        editMenu.add(cutMenuItem);
        editMenu.add(copyMenuItem);
        
        JMenu pasteMenu = new JMenu("Paste");
        pasteMenu.add(pasteMenuItem);
        pasteMenu.add(pasteToNewMenuItem);
        editMenu.add(pasteMenu);
        editMenu.addSeparator();
        
        
        editMenu.add(cropMenuItem);
        editMenu.addSeparator();
        
        editMenu.add(resizeMenuItem);
        editMenu.add(horizontalMirrorMenuItem);
        editMenu.add(verticalMirrorMenuItem);
        editMenu.add(clockwiseMenuItem);
        editMenu.add(counterClockwiseMenuItem);
        editMenu.addSeparator();
        editMenu.add(batchMenuItem);
        
        // batch box
        String[] items = {"Resize", 
                          "Horizontal mirror", "Vertical mirror", 
                          "Rotate clockwise", "Rotate counter-clockwise"};
        batchComboBox = new JComboBox(items);
        
        undoMenuItem.setEnabled(false);
        redoMenuItem.setEnabled(false);
        cutMenuItem.setEnabled(false);
        copyMenuItem.setEnabled(false);
        pasteMenuItem.setEnabled(false);
        cropMenuItem.setEnabled(false);
        resizeMenuItem.setEnabled(false);
        horizontalMirrorMenuItem.setEnabled(false);
        verticalMirrorMenuItem.setEnabled(false);
        clockwiseMenuItem.setEnabled(false);
        counterClockwiseMenuItem.setEnabled(false);
        batchMenuItem.setEnabled(false);
        
        // set up toolbar
        toolBar = new JToolBar("Edit toolbar");
        toolBar.setLayout(new FlowLayout(FlowLayout.LEFT));
        
        JPanel colorPanel = new JPanel();
        colorPanel.setLayout(null);
        Dimension panelDim = colorPanel.getPreferredSize();
        panelDim.setSize(20, 20);
        colorPanel.setPreferredSize(panelDim);
        
        foreColorBox = new ColorDemoBox(Color.black);
        foreColorBox.setToolTipText("Foreground Color");
        foreColorBox.setLocation(0, 0);
        colorPanel.add(foreColorBox);
        
        backColorBox = new ColorDemoBox(Color.white);
        backColorBox.setToolTipText("Background Color");
        backColorBox.setLocation(7, 7);
        colorPanel.add(backColorBox);
        
        toolBar.add(colorPanel);
        
        toolBar.addSeparator();
        
        brushSpinner = new JSpinner();
        brushSpinner.setValue(new Integer(10));
        brushSpinner.setToolTipText("Brush width");
        toolBar.add(brushSpinner);
        
        toolBar.addSeparator();
        
        selectBtn = new JToggleButton(selectIcon);
        selectBtn.setSelected(true);
        selectBtn.setToolTipText("Selection");
        
        brushBtn = new JToggleButton(brushIcon);
        brushBtn.setToolTipText("Brush");
        textBtn = new JToggleButton(textIcon);
        textBtn.setToolTipText("Text");
        viewBtn = new JToggleButton(viewIcon);
        textBtn.setToolTipText("View");
        
        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(selectBtn);
        buttonGroup.add(brushBtn);
        buttonGroup.add(textBtn);
        buttonGroup.add(viewBtn);
        
        toolBar.add(selectBtn);
        toolBar.add(brushBtn);
        toolBar.add(textBtn);
        toolBar.add(viewBtn);
        toolBar.addSeparator();
        
        cutBtn = new JButton(cutIcon);
        cutBtn.setToolTipText("Cut");
        copyBtn = new JButton(copyIcon);
        copyBtn.setToolTipText("Copy");
        pasteBtn = new JButton(pasteIcon);
        pasteBtn.setToolTipText("Paste");
        cropBtn = new JButton(cropIcon);
        cropBtn.setToolTipText("Crop");
        
        toolBar.add(cutBtn);
        toolBar.add(copyBtn);
        toolBar.add(pasteBtn);
        toolBar.addSeparator();
        
        toolBar.add(cropBtn);
        
        cutBtn.setEnabled(false);
        copyBtn.setEnabled(false);
        pasteBtn.setEnabled(false);
        cropBtn.setEnabled(false);
    }
    
    private void setupEventListener() {
        // menuitem event listener
        undoMenuItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
        redoMenuItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_MASK));
        cutMenuItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
        copyMenuItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
        pasteMenuItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
        pasteToNewMenuItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_MASK));
        cropMenuItem.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_K, InputEvent.CTRL_MASK));

        undoMenuItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        if(getDesktopPane().getSelectedFrame() == null)
                            return;
                        
                        if(getMementoManager(getCanvasOfSelectedFrame()).isFirstUndo()) {
                            getMementoManager(getCanvasOfSelectedFrame())
                                  .addImage(getCanvasOfSelectedFrame().getImage());
                            getMementoManager(getCanvasOfSelectedFrame()).undoImage();
                        }
                        
                        Image image = getMementoManager(getCanvasOfSelectedFrame()).undoImage();
                        
                        if(image != null) {
                            getCanvasOfSelectedFrame().setImage(image);
                            
                            // if the image is full screen size, resize it to fit the frame size.
                            fitAppSize(image);
                        }
                        
                        checkEditMenuItem();
                    }
                }
            );
        
        redoMenuItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        if(getDesktopPane().getSelectedFrame() == null)
                            return;
                            
                        Image image = getMementoManager(getCanvasOfSelectedFrame()).redoImage();
                        
                        if(image != null) {
                            getCanvasOfSelectedFrame().setImage(image);
                            
                            // if the image is full screen size, resize it to fit the frame size.
                            fitAppSize(image);
                        }
                        
                        checkEditMenuItem();
                    }
                }
            );
        
        cutMenuItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        copyToClipBoard(true);
                        pasteToNewMenuItem.setEnabled(true);
                        checkEditMenuItem();
                    }
                }
            );
        
        copyMenuItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        copyToClipBoard(false);
                        pasteToNewMenuItem.setEnabled(true);
                        checkEditMenuItem();
                    }
                }
            );
        
        pasteMenuItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        paste();
                    }
                }
            );
        
        pasteToNewMenuItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        pasteToNew();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -