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

📄 notepad_textarea.java

📁 java 编写的代码
💻 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 + -