您的位置:首页 > 编程语言 > Java开发

今天找到一篇在JTextArea面板中,添加右键操作,分享给大家。

2014-05-11 18:26 459 查看
import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.Transferable;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.InputEvent;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JFrame;

import javax.swing.JMenuItem;

import javax.swing.JPopupMenu;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.KeyStroke;

import javax.swing.UIManager;

/**

 * Java右键菜单实现文本组件内容的的复制、粘贴、剪切功能

 *

 * @author 五斗米 <如转载请保留作者和出处>

 * @blog http://blog.csdn.net/mq612
 */

public class Test extends JFrame {

    private static final long serialVersionUID = -5942087991012920147L;

    private JScrollPane pane = null;

    private TextAreaMenu text = null;

    public Test() {

        super("右键菜单");

        try { // 使用Windows的界面风格

            UIManager

                    .setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

        } catch (Exception e) {

            e.printStackTrace();

        }

        text = new TextAreaMenu();

        pane = new JScrollPane(text);

        this.getContentPane().add(pane);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setSize(300, 200);

        this.setVisible(true);

    }

    public static void main(String args[]) {

        new Test();

    }

    /**

     * 带有功能菜单的JTextArea

     *

     * @author 五斗米 <如转载请保留作者和出处>

     * @blog http://blog.csdn.net/mq612
     */

    class TextAreaMenu extends JTextArea implements MouseListener {

        private static final long serialVersionUID = -2308615404205560110L;

        private JPopupMenu pop = null; // 弹出菜单

        private JMenuItem copy = null, paste = null, cut = null; // 三个功能菜单

        public TextAreaMenu() {

            super();

            init();

        }

        private void init() {

            this.addMouseListener(this);

            pop = new JPopupMenu();

            pop.add(copy = new JMenuItem("复制"));

            pop.add(paste = new JMenuItem("粘贴"));

            pop.add(cut = new JMenuItem("剪切"));

            copy.setAccelerator(KeyStroke.getKeyStroke('C',

                    InputEvent.CTRL_MASK));

            paste.setAccelerator(KeyStroke.getKeyStroke('V',

                    InputEvent.CTRL_MASK));

            cut.setAccelerator(KeyStroke

                    .getKeyStroke('X', InputEvent.CTRL_MASK));

            copy.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {

                    action(e);

                }

            });

            paste.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {

                    action(e);

                }

            });

            cut.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {

                    action(e);

                }

            });

            this.add(pop);

        }

        /**

         * 菜单动作

         *

         * @param e

         */

        public void action(ActionEvent e) {

            String str = e.getActionCommand();

            if (str.equals(copy.getText())) { // 复制

                this.copy();

            } else if (str.equals(paste.getText())) { // 粘贴

                this.paste();

            } else if (str.equals(cut.getText())) { // 剪切

                this.cut();

            }

        }

        public JPopupMenu getPop() {

            return pop;

        }

        public void setPop(JPopupMenu pop) {

            this.pop = pop;

        }

        /**

         * 剪切板中是否有文本数据可供粘贴

         *

         * @return true为有文本数据

         */

        public boolean isClipboardString() {

            boolean b = false;

            Clipboard clipboard = this.getToolkit().getSystemClipboard();

            Transferable content = clipboard.getContents(this);

            try {

                if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {

                    b = true;

                }

            } catch (Exception e) {

            }

            return b;

        }

        /**

         * 文本组件中是否具备复制的条件

         *

         * @return true为具备

         */

        public boolean isCanCopy() {

            boolean b = false;

            int start = this.getSelectionStart();

            int end = this.getSelectionEnd();

            if (start != end)

                b = true;

            return b;

        }

        public void mouseClicked(MouseEvent e) {

        }

        public void mouseEntered(MouseEvent e) {

        }

        public void mouseExited(MouseEvent e) {

        }

        public void mousePressed(MouseEvent e) {

            if (e.getButton() == MouseEvent.BUTTON3) {

                copy.setEnabled(isCanCopy());

                paste.setEnabled(isClipboardString());

                cut.setEnabled(isCanCopy());

                pop.show(this, e.getX(), e.getY());

            }

        }

        public void mouseReleased(MouseEvent e) {

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 界面
相关文章推荐