基于java swing GUI界面,编辑框的复制算法
2013-11-18 14:59
363 查看
这个算法是在网上找到的一个比较有用的算法,能够容易的通过菜单对编辑区的内容进行复制,粘贴,剪切操作。
倘若你所制作的是一个需要进行这些操作的程序,那么可以直接用内部类的形式实现。一下代码为一组通用代码。
class TextAreaMenu extends JTextArea implements MouseListener {
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) {
}
}
此段代码是一段功能性代码,要完成需要添加到其他应用中。
倘若你所制作的是一个需要进行这些操作的程序,那么可以直接用内部类的形式实现。一下代码为一组通用代码。
class TextAreaMenu extends JTextArea implements MouseListener {
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) {
}
}
此段代码是一段功能性代码,要完成需要添加到其他应用中。
相关文章推荐
- #javaGUI#基于swing包的java用户界面设置入门,组件篇
- 基于java swing界面的图书馆书库管理系统
- 自己模仿QQ基于Java Swing做的一个QQ界面
- 【算法】java版红黑树算法的完整实现及swing界面演示程序
- Java毕设---基于Java swing界面的简单数据库系统
- java实现gui界面的文件复制
- #javaGUI#基于swing包的java用户界面设置入门,布局篇
- JAVA Swing GUI设计 WindowBuilder Pro Container使用大全8——JInternalFrame使用
- 用Java swing写的一个个性化界面的音乐播放器
- 基于JAVA实现的排序算法总结
- 黑马程序员—java基础_GUI图形化界面
- 第一个用java-swing写的 图形界面程序-扫雷
- JavaSwing图形界面编程(一)
- JavaSwing图形界面编程之JApplet(六)
- Java Swing界面编程(27)---JRadioButton事件处理
- JavaSwing图形界面编程之JSlider(一)
- 基于JAVA Swing,Hibernate,MySQL模拟QQ
- 基于遗传算法求解TSP问题(Java界面)
- Java Swing界面制作
- Solr 基于java的复制(Master-Slave配置)