📄 notepad_textarea.java
字号:
/**
* 自己定义的一个特殊的文本编辑Compnont
*/
package com.edu.sccp.snail.notepad.view;
import java.awt.Component;
import java.awt.Dimension;
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.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.text.Document;
/**
* @author x组
* @return 一个带有特殊功能的JTextArea
* @time 2008-1-6
*/
// //////////////////////////////////////////////////
public class Notepad_TextArea extends JTextArea {
private static final long serialVersionUID = -2308615404205560110L;
private JPopupMenu pm = null; // 弹出菜单
private JMenuItem copy = null, paste = null, cut = null, per = null,
refresh = null, find = null, change = null; // 右键功能菜单
/**
* 构造函数
*
* @time 2008-1-6
*/
public Notepad_TextArea() {
super();
init();
}
/**
* 初始化函数
*
* @time 2008-1-6
*/
private void init() {
this.addMouseListener(new JPopumMenu_MouseListener());
pm = getJPopuMenu(); // 得到右键菜单
}
/**
* 得到右键菜单
* @return PopupMenu
* @author 小豆包
* @time 08/1/4
*/
public JPopupMenu getJPopuMenu() {
JPopupMenu pm1 = new JPopupMenu();
pm1.add(refresh = new JMenuItem("刷新"));
pm1.addSeparator();
pm1.add(cut = new JMenuItem("剪切"));
pm1.add(copy = new JMenuItem("复制"));
pm1.add(paste = new JMenuItem("粘贴"));
pm1.addSeparator();
pm1.add(find = new JMenuItem("查找"));
pm1.add(change = new JMenuItem("替换"));
pm1.addSeparator();
pm1.add(per = 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));
find.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.SHIFT_MASK));
change.setAccelerator(KeyStroke
.getKeyStroke('C', InputEvent.SHIFT_MASK));
refresh.setAccelerator(KeyStroke.getKeyStroke('R',
InputEvent.SHIFT_MASK));
per.setAccelerator(KeyStroke.getKeyStroke('P', InputEvent.ALT_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);
}
});
return pm1;
}
/**
* 菜单动作
* @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 getpm() {
return pm;
}
public void setpm(JPopupMenu pm) {
this.pm = pm;
}
/**
* 剪切板中是否有文本数据可供粘贴
*
* @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;
}
/**
* 右键菜单的实现 保证右键菜单必须在可访问的父组件的范围之内
* 判断。如果获得的point超出显示的范围 则自动调整大小
* @author SSnail
* @time 08/1/4
*/
class JPopumMenu_MouseListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
Component parner = e.getComponent();//
if (e.getButton() == MouseEvent.BUTTON3) {
int x = e.getX();
int y = e.getY(); // 获得鼠标在父组件上的坐标
Dimension parentSize = parner.getSize(); // 返回父组件的大小
Dimension d = pm.getSize();
y = ((parentSize.height - y) - d.height) > 0 ? y
: (parentSize.height - d.height); // 如果坐标显示不开 则自动定位
x = ((parentSize.width - x) - d.width) > 0 ? x
: (parentSize.width - d.width);
pm.show(parner, x, y);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -