<< 返回
/**
* 为了状态栏功能而设立的监听类
* 第一次改写:
* 同时也适用于对“编辑”-“删除”菜单的可用设置
* 第二次改写:
* 同时也适用于对“格式”-“字体”中三个文本框的检索功能
* 第三次改写:
* 添加对字体示例的设置
* 第四次改写:
* 同时也适用于查找/替换中的JTextField
* 第五次改写:
* 可以根据JTextArea的非空情况来设置菜单项查找、查找下一个是否可用
* 设置专用于Find.java的构造方法
* 第六次改写:
* 可以根据JTextArea的非空情况来设置按钮查找下一个、替换、全部替换是否可用
* 设置专用于Replace.java的构造方法
*/
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JList;
import javax.swing.JTextField;
public class TextKeyListener extends KeyAdapter {
private Status status = null;
private Notepad notepad = null;
private NoteMenu menu = null;
private JList<?> list = null;
private JTextField text = null;
private NoteFont noteFont = null;
private Find find = null;
private Replace replace = null;
public TextKeyListener(Status status, Notepad notepad, NoteMenu menu, JList<?> list, JTextField text, NoteFont noteFont) {
this.status = status;
this.notepad = notepad;
this.menu = menu;
this.list = list;
this.text = text;
this.noteFont = noteFont;
}
public TextKeyListener(Find find) {
this.find = find;
}
public TextKeyListener(Replace replace) {
this.replace = replace;
}
private void setMenuItemEnable(String who, boolean whether) {
if ("SELECT".equals(who)) {
this.menu.setItem("DEL", whether);
this.menu.setItem("CUT", whether);
this.menu.setItem("COPY", whether);
setPaste();
} else if ("NOT_NULL".equals(who)) {
this.menu.setItem("FIND", whether);
this.menu.setItem("FIND_NEXT", whether);
} else if ("UNDO".equals(who)) {
this.menu.setItem("UNDO", whether);
} else if ("REDO".equals(who)) {
this.menu.setItem("REDO", whether);
}
}
private void setPaste() { // 设置“粘贴”是否可用
Clipboard clipboard = this.notepad.getTextArea().getToolkit().getSystemClipboard();
Transferable content = clipboard.getContents(this.notepad.getTextArea());
try {
String dstData = (String)content.getTransferData(DataFlavor.stringFlavor);
if (dstData == null || "".equals(dstData)) {
this.menu.setItem("PASTE", false);
} else {
this.menu.setItem("PASTE", true);
}
} catch (Exception e) {}
}
private void checkButtonEnable() {
this.setMenuItemEnable("UNDO", notepad.getUndomg().canUndo());
this.setMenuItemEnable("REDO", notepad.getUndomg().canRedo());
if (this.find != null) {
if (this.find.getTextField().getText() != null && !("".equals(this.find.getTextField().getText()))) {
this.find.getButton().setEnabled(true);
} else {
this.find.getButton().setEnabled(false);
}
} else if (this.replace != null) {
if (this.replace.getTextField().getText() != null && !("".equals(this.replace.getTextField().getText()))) {
this.replace.getButton(1).setEnabled(true);
this.replace.getButton(2).setEnabled(true);
this.replace.getButton(3).setEnabled(true);
} else {
this.replace.getButton(1).setEnabled(false);
this.replace.getButton(2).setEnabled(false);
this.replace.getButton(3).setEnabled(false);
}
}
}
// 按下某键
public void keyPressed(KeyEvent e) {
this.setMenuItemEnable("UNDO", notepad.getUndomg().canUndo());
this.setMenuItemEnable("REDO", notepad.getUndomg().canRedo());
this.checkButtonEnable();
if (this.find != null) return;
if (this.replace != null) return;
if (this.list != null && this.text != null) {
this.list.setSelectedValue(this.text.getText(), true); // 有可能当前输入的字样找不到匹配
this.noteFont.changeLook();
} else {
try {
this.status.updateStatus();
} catch (Exception e1) {
System.out.println("发生异常!\nTextMouseListener.java: mousePressed(MouseEvent)");
}
if (this.notepad.getTextArea().getSelectedText() != null && !("".equals(this.notepad.getTextArea().getSelectedText()))) {
//如果选中的内容不为空
setMenuItemEnable("SELECT", true);
} else {
setMenuItemEnable("SELECT", false);
}
}
if (this.notepad.getTextArea().getText() != null && !("".equals(this.notepad.getTextArea().getText()))) {
setMenuItemEnable("NOT_NULL", true);
} else {
setMenuItemEnable("NOT_NULL", false);
}
}
// 释放某键
public void keyReleased(KeyEvent e) {
this.checkButtonEnable();
if (this.find != null) return;
if (this.replace != null) return;
if (this.list != null && this.text != null) {
this.list.setSelectedValue(this.text.getText(), true); // 有可能当前输入的字样找不到匹配
this.noteFont.changeLook();
} else {
try {
this.status.updateStatus();
} catch (Exception e1) {
System.out.println("发生异常!\nTextMouseListener.java: mousePressed(MouseEvent)");
}
if (this.notepad.getTextArea().getSelectedText() != null && !("".equals(this.notepad.getTextArea().getSelectedText()))) {
//如果选中的内容不为空
setMenuItemEnable("SELECT", true);
} else {
setMenuItemEnable("SELECT", false);
}
}
if (this.notepad.getTextArea().getText() != null && !("".equals(this.notepad.getTextArea().getText()))) {
setMenuItemEnable("NOT_NULL", true);
} else {
setMenuItemEnable("NOT_NULL", false);
}
}
}
<< 返回