java记事本实现剪切、复制、粘贴、删除

后续实现剪切、复制、粘贴、删除需要用到的各个组件定义如下

JTextArea jtext = new JTextArea();//文本区域
//系统剪贴板  
Toolkit toolkit=Toolkit.getDefaultToolkit(); //得到工具箱 
Clipboard clipBoard=toolkit.getSystemClipboard();//从工具箱中获得系统剪贴板

JMenu jm_edit = new JMenu("编辑(E)");//编辑菜单
JMenuItem edit_cut = new JMenuItem("剪切(T)");//编辑菜单下的菜单子项
JMenuItem edit_copy = new JMenuItem("复制(C)");
JMenuItem edit_paste = new JMenuItem("粘贴(P)");
JMenuItem edit_delete = new JMenuItem("删除(L)");

为编辑菜单添加菜单监听器,判断剪切、复制、粘贴、删除这些功能在各种情况下是否可用

jm_edit.addMenuListener(new MenuListener()  
{   public void menuCanceled(MenuEvent e)//取消菜单时调用  
    {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  
    }  
    public void menuDeselected(MenuEvent e)//取消选择某个菜单时调用  
    {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  
    }  
    public void menuSelected(MenuEvent e)//选择某个菜单时调用  
    {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  
    }  
});

判断功能可用性的函数定义如下

//设置菜单子项的可用性:剪切,复制,粘帖,删除功能  
void checkMenuItemEnabled()  
{   String selectText=jtext.getSelectedText();//获取文本区域文本
    if(selectText==null)//文本区域为空,不能剪切、复制、删除  
    {   edit_cut.setEnabled(false);    
        edit_copy.setEnabled(false);   
        edit_delete.setEnabled(false);   
    }  
    else//非空即可  
    {   edit_cut.setEnabled(true);    
        edit_copy.setEnabled(true);   
        edit_delete.setEnabled(true);  
    }  
    //粘帖功能可用性判断  
    Transferable contents=clipBoard.getContents(MyNotepad.this);//获取系统剪贴板内容 
    if(contents==null)//空板子粘贴不了
        edit_paste.setEnabled(false);    
    else  
        edit_paste.setEnabled(true);      
}

关于系统剪贴板:只有一种类型的数据可以复制到剪贴板或者从剪贴板中取出,即 Transferable对象。

剪切功能的实现:

jtext.requestFocus();//把输入焦点放在文本区域上
String text=jtext.getSelectedText();//获取选中的文本内容
//StringSelection实现的所有接口ClipboardOwner和Transferable 
StringSelection selection=new StringSelection(text);  
clipBoard.setContents(selection,null);//将选中内容放入剪贴板  
jtext.replaceRange("",jtext.getSelectionStart(),jtext.getSelectionEnd());//空字符替换选中文本 
checkMenuItemEnabled();//判断剪切,复制,粘帖,删除功能的可用性

复制功能的实现:剪切功能不用空字符替代选中文本

jtext.requestFocus();  
String text=jtext.getSelectedText();  
StringSelection selection=new StringSelection(text);  
clipBoard.setContents(selection,null);  
checkMenuItemEnabled();//设置剪切,复制,粘帖,删除功能的可用性

粘贴功能:

jtext.requestFocus();  
//只有一种类型的数据可以复制到剪贴板或者从剪贴板中取出,即Transferable对象。
Transferable contents=clipBoard.getContents(this);  
if(contents==null)//空板子
    return;  
String text="";  
try  
{   
    //getTransferData返回一个对象,该对象表示将要被传输的数据。
//返回对象的类是由该 flavor 的表示类定义的
    //DataFlavor.stringFlavor:表示 Java Unicode 字符类
    text=(String)contents.getTransferData(DataFlavor.stringFlavor);  
}  
catch (Exception exception)//捕获到异常可以啥也不干,但是不写就报错…………
{  
}  
//用剪贴板内容替换选中文本,未选中就是插入光标所在位置
jtext.replaceRange(text,jtext.getSelectionStart(),jtext.getSelectionEnd());  
checkMenuItemEnabled();

删除功能:用空字符替代选中文本,和按DELETE键效果一样

jtext.requestFocus();  
jtext.replaceRange("",jtext.getSelectionStart(),jtext.getSelectionEnd());  
checkMenuItemEnabled(); //设置剪切、复制、粘贴、删除等功能的可用性

如有错误,欢迎指正。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值