引用页_初学Java:仿写记事本_TextMouseListener.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.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JList;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;

public class TextMouseListener extends MouseAdapter {
    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 TextMouseListener(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 TextMouseListener(Find find) {
    	this.find = find;
    }
    
    public TextMouseListener(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 mousePressed(MouseEvent 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.text.setText(this.list.getSelectedValue().toString());
    		this.noteFont.changeLook();
    	} else {
    		if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
                try {
    				this.status.updateStatus();
    			} catch (BadLocationException 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 mouseReleased(MouseEvent e) {
    	this.checkButtonEnable();
    	if (this.find != null) return;
    	if (this.replace != null) return;
    	if (this.list != null && this.text != null) {
    		this.text.setText(this.list.getSelectedValue().toString());
    		this.noteFont.changeLook();
    	} else {
    		if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
                try {
    				this.status.updateStatus();
    			} catch (BadLocationException 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值