📄 editmenu.java
字号:
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 + -