1. 程式人生 > >記事本(含剪下、複製、貼上、全選、撤銷)核心設計

記事本(含剪下、複製、貼上、全選、撤銷)核心設計

}         
          br.close();
對文字的編輯功能需要用到Clipboard類,也就是剪貼簿。通過clipboard = getToolkit().getSystemClipboard();獲取系統的剪貼簿,也就當系統剪貼簿上有內容的時候,同樣可以被用到自己編寫的記事本軟體中。複製操作,如下程式碼:
public void copy(){
      //拖動選取文字
      String temp = mf.body.getSelectedText();
       //把獲取的內容複製到連續字元器,這個類繼承了剪貼簿介面
       StringSelection text = new StringSelection(temp);
       //把內容放在剪貼簿
      mf.clipboard.setContents(text, null);
}
我的mf.body是指主只介面上的名字叫body的JTextArea控制元件。剪下內容跟複製類似,在複製的基礎之上再加三行程式碼:
//標記開始位置
int start = mf.body.getSelectionStart();
//標記結束位置
int end = mf.body.getSelectionEnd();
//刪除所選段
mf.body.replaceRange("", start, end);
最複雜的貼上來了,我看了一些人寫這個功能寫得很簡陋,還有bug,沒有考慮到當要貼上的時候滑鼠已經選中了一部分內容。當然,要貼上之前還是先要判斷一下剪貼簿裡面有沒有內容,如果沒有當然貼不出什麼東西。所以,我就把貼上這個功能寫成:
public void paste(){
          //Transferable介面,把剪貼簿的內容轉換成資料
          Transferable contents = mf.clipboard.getContents(this);
         //DataFalvor類判斷是否能把剪貼簿的內容轉換成所需資料型別
          DataFlavor flavor = DataFlavor.stringFlavor;
         //如果可以轉換
         if(contents.isDataFlavorSupported(flavor)){
              String str;
             try {//開始轉換
                str=(String)contents.getTransferData(flavor);
                //如果要貼上時,滑鼠已經選中了一些字元
                 if(mf.body.getSelectedText()!=null){
                    //定位被選中字元的開始位置
                     int start = mf.body.getSelectionStart();
                     //定位被選中字元的末尾位置
                     int end = mf.body.getSelectionEnd();
                     //把貼上的內容替換成被選中的內容
                    mf.body.replaceRange(str, start, end);
                 }else{
                    //獲取滑鼠所在TextArea的位置
                    int mouse = mf.body.getCaretPosition();
                    //在滑鼠所在的位置貼上內容
                    mf.body.insert(str, mouse);
                 }
                
             } catch(UnsupportedFlavorException e) {
                e.printStackTrace();
             } catch (IOException e) {
                 e.printStackTrace();
              } catch(IllegalArgumentException e){
                e.printStackTrace();
             }
             }
}

相關推薦

記事本複製貼上撤銷核心設計

}                    br.close();對文字的編輯功能需要用到Clipboard類,也就是剪貼簿。通過clipboard = getToolkit().getSystemClipboard();獲取系統的剪貼簿,也就當系統剪貼簿上有內容的時候,同樣可以被用到自己編寫的記事本軟體中。複

C#複製貼上底層應用編寫

zz備用複製剪下貼上的底層應用 /// <summary> /// 複製或剪下檔案至剪貼簿(方法) /// </summary> //

Android自定義文字選中模式複製,粘帖

為了方便操作,在PC端我們常用的Ctrl+A(全選)/Ctrl+C(複製)/Ctrl+X(剪下)/Ctrl+V(粘帖)提高了我們的辦公效率。然後在手機端怎麼實現呢?我花了一天的時間研究了一下。 首先說一下TextView的選中,要想選中TextV

6_ffmpeg視訊處理工具視訊轉碼合併......(20181212)

ffmpeg視訊處理工具(視訊剪下、轉碼、合併......) 1、ffmpeg的下載和安裝 2、ffmpeg常用處理功能 1、視訊分離成圖片序列:video—to—images(即視訊幀) 2、圖片序列合成視訊:images—to—vi

Selenium+Python測試鍵盤操作---複製貼上

''' 鍵盤操作--將百度搜索的關鍵字複製到必應中進行搜尋 --匯入模組from selenium.webdriver.common.keys import Keys --剪下 --複製 ''' from selenium import webdriver from sele

用jQuery實現功能

sele 元素 selectall input html元素 UNC 推薦 not rop 在jQuery選擇器的基礎下我們實現一個全選,反選,全不選功能! <script type="text/javascript"> $(functio

Android ListView批量選擇

轉載:https://blog.csdn.net/zuiwuyuan/article/details/50042841?utm_source=blogxgwz0  APP的開發中,會常遇到這樣的需求:批量取消(刪除)List中的資料。這就要求ListVIew支援批量選擇、全選、單選等等

easyui combobox拉框實現多框以及的實現

實現效果如下圖: 當勾選全選的時候,可以選中下列所有的選項,當取消勾選時可取消所有勾選。 廢話不多說 貼程式碼吧: 前端程式碼: //這裡的id是上面的combobox的id,因為我要在點選一個按鈕的之後再動態的加載出來,所以我把它單獨的抽取出來了。如果需要一開

製作複製功能ZeroClipboard中修改flash覆蓋面積大小

ZeroClipboard :version 1.0.7 一般用法與網上發的部落格差不多,今天只對如何修改flash塊的大小進行說明。 先貼程式碼: ZeroClipboard.setMoviePath("${base}/js/ZeroClipboard/

HTML,JS禁止滑鼠右鍵禁止複製貼上的方法

禁止滑鼠右鍵、禁止全選、複製、貼上; oncontextmenu事件禁用右鍵選單;  js程式碼: document.oncontextmenu = function(){ event.returnValue = false; } // 或者直接返回整個事件 do

複製文字的js庫——clipboard.js

首先,載入clipboard.js檔案(我上網找的一個cdn): <script src="https://cdn.rawgit.com/zenorocha/clipboard.js/master/dist/clipboard.min.js">

vim呼叫系統複製貼上

文章參考:http://vim.wikia.com/wiki/In_line_copy_and_paste_to_system_clipboard。 將以下內容新增到~/下的.vimrc " On OSX vmap <C-c> y:call system("pb

HTML,JS禁止滑鼠右鍵禁止複製貼上的方法;

禁止滑鼠右鍵、禁止全選、複製、貼上; oncontextmenu事件禁用右鍵選單; js程式碼: document.oncontextmenu = function(){ event.returnValue = false; } // 或者直接返回

Linux shell 複製貼上Copy & Paste Operation on Linux shell

1.  Copy:CTRL+SHIFT+C Paste:CTRL+SHIFT+V 2. 左鍵選中 單擊滑鼠中鍵,或SHIFT+INSERT 即貼上到命令列 3.  gconftool-2 -t str -s /apps/gnome-terminal/keybindings/

js模擬Ctrl+C複製Ctrl+V貼上功能之tabindexfocuskeyCode

話不多說,今天遇到了一個大坑,是這樣的,一顆DOM樹中有一個節點,要對其實現Ctrl+C複製、Ctrl+V貼上功能。起初拿到這個任務,我首先想到的是選中它,然後按下Ctrl、C實現複製,再按下Ctrl、V實現貼上功能。嗯,大體流程就是這樣。 問題來了,

EasyUI拉框實現多和模糊查詢

其實整個的思路還是很麻煩的。之前網上查不到能囊括上面所有東西的。但是參考之後還是摸出了一種新的方法,但是仍然不完美。畢竟是在封裝的東西上面修改。程式碼實現:<!DOCTYPE html> <html lang="en"> <head&g

改進後的顯示照片可以,上傳圓形的圖片

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCo

flutter 複製貼上

複製貼上功能 import 'package:flutter/services.dart'; Clipboard.setDat

DEV GridControl控制元件使用CheckBox操作按鈕事件處理,獲取值

##1、GridControl控制元件使用 ###(1)繫結資料來源 //繫結DataTable gridControl1.DataSource = DbHelper.ExecuteDataTable("SELECT * FROM dc_Log"); ###(2)配置顯示列 ###(3)插入按鈕列

js實現復框的全部和反

item itl true mon 復選框 loading 實現 align inpu 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta chars