关闭

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

141人阅读 评论(0) 收藏 举报

<< 返回
  

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6094次
    • 积分:228
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档