今天找到一篇在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) {
}
}
}
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) {
}
}
}
相关文章推荐
- 今天,逛CSDN看到一篇文章,很有意思,乐意与大家分享。(开发者版本:你属于哪个版本的程序员?)
- 很早以前翻译的一篇文章,今天用到,又温习了一下,从博客转过来和大家分享。
- 今天看到的一篇新人如何成长为老手的文章,记录下,大家分享
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- 今天有些失落,给大家分享一篇文章,希望咱们都能以此明心智。
- 今天有时间戳转换的需求,网上找了半天才找到相关代码,经测试有效,特作此笔记和大家分享
- JDBC中的添加、删除、修改操作的共用方法与大家分享
- tomcat 启动报内存溢出问题!今天遇到的找到答案了!和大家分享一下
- 免费的C语言和数据结构教学视频(找了很久才找到的好教程,拿出来分享给大家)
- 转贴-今天与大家分享5R笔记法,又叫做康乃笔记法,是用产生这种笔记法的大学校名命名的。自己感觉这种方法很具有借鉴意义,不管是在规划自己的思路,还是在做听课笔记,都具有很好的效果!这一方法几乎适用于一切讲授或阅读课,特别是对于听课笔记,5R笔记法应是最佳首选。这种方法是记与学,思考与运用相结合的有效方
- sublime text3添加右键打开的操作
- [转贴]找到一篇有关Java RMI和.NET Remoting的分析文章,大家不妨一读。
- 2008年10月份买的手机今天在四季青买衣服的时候被偷了|总结了几个经验和大家分享下
- [技巧分享-软件使用] Beyond Compare添加到系统右键菜单
- 分享项目经验:一个净水器的显示操作面板开发
- 今天时间安排的不错,与大家分享下:早中晚不同的效率和状态,做不同重要度、紧迫度、难度的事
- 为dojo普及做贡献-C--ajax操作是完成了,但把添加、修改等按钮改成右键,再把提交表单改酷点
- js精度溢出(自己今天碰到的问题和大家分享)
- 今天又看到了一篇关于程序运行时内存方面的文章,特地来分享一下。
- InstallShield 2011 今天正式发布啦,先把新功能和亮点与大家分享下!