引用页_初学Java:仿写记事本_TextKeyListener.java

<< 返回
  

/**
 * 为了状态栏功能而设立的监听类
 * 第一次改写:
 * 		同时也适用于对“编辑”-“删除”菜单的可用设置
 * 第二次改写:
 * 		同时也适用于对“格式”-“字体”中三个文本框的检索功能
 * 第三次改写:
 * 		添加对字体示例的设置
 * 第四次改写:
 * 		同时也适用于查找/替换中的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);
    	}
    }
}

  
<< 返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值