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

📄 popupeditmenumanager.java

📁 实现了一个由时间服务器
💻 JAVA
字号:
package client.tools;

import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTextPane;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Element;
import javax.swing.text.JTextComponent;
import javax.swing.text.StyleConstants;

/**
 * 本类可以为文本域添加弹出编辑菜单项,菜单项包括:复制,粘贴,剪切,全选,不提供对JTextPane,JEditorPane的支持
 * 
 * @author Elegate
 */
public final class PopupEditMenuManager
{
    /**
         * 为指定的JTextComponent 添加弹出菜单
         * 
         * @param txtComponent
         *                文本域
         */
    public static void addPopupEditMenu(JTextComponent txtComponent)
    {
	JPopupMenu popupMenu = new JPopupMenu();
	JMenuItem mnuCut = new JMenuItem("剪切");
	mnuCut.addActionListener(new CutL(txtComponent));
	JMenuItem mnuCopy = new JMenuItem("拷贝");
	mnuCopy.addActionListener(new CopyL(txtComponent));
	JMenuItem mnuPaste = new JMenuItem("粘贴");
	mnuPaste.addActionListener(new PasteL(txtComponent));
	JMenuItem mnuSelectAll = new JMenuItem("全选");
	mnuSelectAll.addActionListener(new SelectAllL(txtComponent));
	popupMenu.add(mnuCut);
	popupMenu.add(mnuCopy);
	popupMenu.add(mnuPaste);
	popupMenu.add(mnuSelectAll);
	txtComponent.add(popupMenu);
	txtComponent.addMouseListener(new MouseL(popupMenu, txtComponent,
		mnuCut, mnuPaste));
    }

    private static class MouseL extends MouseAdapter
    {
	private JPopupMenu popupMenu;

	private JTextComponent txtComp;

	private JMenuItem mnuCut;

	private JMenuItem mnuPaste;

	public MouseL(JPopupMenu popup, JTextComponent txtComp,
		JMenuItem mnuCut, JMenuItem mnuPaste)
	{
	    this.popupMenu = popup;
	    this.txtComp = txtComp;
	    this.mnuCut = mnuCut;
	    this.mnuPaste = mnuPaste;
	}

	public void mouseClicked(MouseEvent me)
	{
	    if (me.getButton() == MouseEvent.BUTTON3 && me.getClickCount() == 1)
	    {
		if (txtComp.isEditable())
		{
		    mnuCut.setEnabled(true);
		    mnuPaste.setEnabled(true);
		}
		else
		{
		    mnuCut.setEnabled(false);
		    mnuPaste.setEnabled(false);
		}

		if (txtComp instanceof JTextPane)
		{
		    mnuPaste.setEnabled(true);
		}
		Point p = me.getPoint();
		popupMenu.show(txtComp, p.x, p.y);
	    }
	}
    }

    /**
         * 复制菜单的响应函数
         * 
         * @author Elegate
         */
    private static class CopyL implements ActionListener
    {
	private JTextComponent txtComp;

	public CopyL(JTextComponent txtComp)
	{
	    this.txtComp = txtComp;
	}

	public void actionPerformed(ActionEvent e)
	{
	    if (this.txtComp instanceof JTextPane)
	    {
		JTextPane pane = (JTextPane) this.txtComp;
		DefaultStyledDocument dsd = (DefaultStyledDocument) pane
			.getStyledDocument();
		Element ele = dsd.getParagraphElement(0).getElement(0);
		if (ele.getName().equals("icon"))
		{
		    ImageIcon icon = (ImageIcon) StyleConstants.getIcon(ele
			    .getAttributes());
		    ImageSelection imageSelection = new ImageSelection(icon
			    .getImage());
		    Clipboard cb = Toolkit.getDefaultToolkit()
			    .getSystemClipboard();
		    cb.setContents(imageSelection, null);
		}
	    }
	    else
	    {
		txtComp.copy();
	    }
	}

    }

    /**
         * 剪切菜单的响应函数
         * 
         * @author Elegate
         */
    private static class CutL implements ActionListener
    {
	private JTextComponent txtComp;

	public CutL(JTextComponent txtComp)
	{
	    this.txtComp = txtComp;
	}

	public void actionPerformed(ActionEvent e)
	{
	    txtComp.cut();
	}

    }

    /**
         * 粘贴菜单的响应函数
         * 
         * @author Elegate
         */
    private static class PasteL implements ActionListener
    {
	private JTextComponent txtComp;

	public PasteL(JTextComponent txtComp)
	{
	    this.txtComp = txtComp;
	}

	public void actionPerformed(ActionEvent e)
	{

	    Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
	    Transferable contents = cb.getContents(null);
	    if (contents != null
		    && contents.isDataFlavorSupported(DataFlavor.stringFlavor))
	    {
		txtComp.paste();
	    }
	    else if (contents != null
		    && contents.isDataFlavorSupported(DataFlavor.imageFlavor))
	    {
		try
		{
		    Image img = (Image) contents
			    .getTransferData(DataFlavor.imageFlavor);
		    Icon icon = new ImageIcon(img);
		    if (txtComp instanceof JTextPane)
		    {
			txtComp.setText("");
			((JTextPane) txtComp).insertIcon(icon);
		    }
		}
		catch (UnsupportedFlavorException ex)
		{
		    JOptionPane.showMessageDialog(null, ex, "Error",
			    JOptionPane.ERROR_MESSAGE);
		    ex.printStackTrace();
		}
		catch (IOException exp)
		{
		    exp.printStackTrace();
		}
	    }
	}
    }

    /**
         * 全选菜单的响应函数
         * 
         * @author Elegate
         */
    private static class SelectAllL implements ActionListener
    {
	private JTextComponent txtComp;

	public SelectAllL(JTextComponent txtComp)
	{
	    this.txtComp = txtComp;
	}

	public void actionPerformed(ActionEvent e)
	{
	    int l = txtComp.getText().length();
	    txtComp.setSelectionStart(0);
	    txtComp.setSelectionEnd(l);
	}
    }
}

/**
 * 提供剪贴版的图片数据传送
 * 
 * @author Elegate
 */
class ImageSelection implements Transferable
{

    public ImageSelection(Image image)
    {
	this.image = image;
    }

    public Object getTransferData(DataFlavor flavor)
	    throws UnsupportedFlavorException, IOException
    {
	if (flavor.equals(DataFlavor.imageFlavor))
	{
	    return image;
	}
	else
	{
	    throw new UnsupportedFlavorException(flavor);
	}
    }

    public DataFlavor[] getTransferDataFlavors()
    {
	return new DataFlavor[]
	{ DataFlavor.imageFlavor };
    }

    public boolean isDataFlavorSupported(DataFlavor flavor)
    {
	return DataFlavor.imageFlavor.equals(flavor);
    }

    private Image image;
}

⌨️ 快捷键说明

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