<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    The Goal
    Keep walking……
    posts - 23,  comments - 1,  trackbacks - 0

    用于文本編輯的control有2個:Text和StyledText.后者可以為文本和control本身設定顏色,格式等。這兩個control之間毫無關聯,除了都是Composite的子類之外。

    • The basic Text widget

    package com.swtjface.Ch5;

    import org.eclipse.swt.SWT;

    import org.eclipse.swt.events.VerifyEvent;

    import org.eclipse.swt.events.VerifyListener;

    import org.eclipse.swt.layout.FillLayout;

    import org.eclipse.swt.widgets.Composite;

    import org.eclipse.swt.widgets.Text;

    public class Ch5Capitalizer extends Composite {

    public Ch5Capitalizer(Composite parent) {

    super(parent, SWT.NONE);

    buildControls();

    }

    private void buildControls() {

    this.setLayout(new FillLayout());

    Text text = new Text(this, SWT.MULTI | SWT.V_SCROLL);

    text.addVerifyListener(new VerifyListener() { //每當text被改變,任何以注冊的VerifyListeners便會被調用。此處每按一次鍵盤,此方法就被調用。如果是同時輸入多個字符,也調用一次

    public void verifyText(VerifyEvent e) {

    if( e.text.startsWith("1") ) {

    e.doit = false;

    } //如果文本以1開頭,即不允許編輯

    else {

    e.text = e.text.toUpperCase();

    }

    }

    });

    }

    }

    Text的重要方法,見下圖

    insert()--doesn’t allow you to insert text into the existing content.

    • The StyledText widget

    StyledText包含了一系列的應用到該小部件的預定義的動作,這些是常規的東西如:剪切、粘貼、移動至下一個詞、移動至文末。代表這些動作的常量在org.eclipse.swt.custom程序包中的ST類中有定義。這些常量在兩種情況下發揮功效:首先,你可以使用它們程序性地使用invokeAction()方法調用任一的這些方法;其次,你也可以使用setKeyBinding()方法來將它們綁定于鍵擊行為。setKeyBinding()選定一個鍵(可以通過諸如Shift或是Ctrl之類的編輯鍵來修改SWT常量之一)綁定于指定的動作。如下的例子中組合鍵Ctrl-Q綁定于粘貼動作。引起注意的是這并不意味著會將默認鍵的綁定清除,該兩個綁定都會生效。

    相對于Text而言,還添加了drawing line backgrounds and line styles的事件,可以通過此事件來改變整行的style或背景顏色。注意:如果使用了LineStyleListener,就不能在StyledText實例上調用get/setStyleRange(), 如果使用了LineBackgroundListener,那你就不能調用getLineBackground() or setLineBackground().

    可以通過使用一個StyledText的StyleRanges來改變顯示的風格

    StyleRange
    StyledText通過使用StyleRange類來管理當前所顯示的不同styles。其所有的欄位都是public的可隨意修改,但是要一直到當此StyledText實例的setStyleRange()被調用之后才會生效。

    StyleRanges通過開始偏移量和長度來設定text的區域范圍。
    StyleRange可設定背景和前景色,默認為null,還可設定字體,SWT.NORMAL 或者SWT.BOLD.

    similarTo()可用來判斷兩個StyleRange實例是否有同樣的前景、背景和字體。

    當我們保存text之后,可通過styledText.getStyleRanges()來獲取style信息,此函數會返回an array of StyleRange


    toggleBold()--將已輸入的文本在bold和normal之間切換,是被一個KeyListener調用的,此KeyListener會監聽F1是否被按下

    A StyledText example
    復制、粘貼功能不需要通過代碼便可使用,是和platform的標準鍵盤快捷方式相關聯的

    ExtendedModifyListener和ModifyListener不同,前者提供了關于what was done的event細節,而后者只是當編輯懂作產生時notify,不會去準確的辨別到底何種修改發生了。

    package com.swtjface.Ch5;

    import java.util.LinkedList;

    import java.util.List;

    import org.eclipse.swt.SWT;

    import org.eclipse.swt.custom.*;

    import org.eclipse.swt.events.KeyAdapter;

    import org.eclipse.swt.events.KeyEvent;

    import org.eclipse.swt.layout.FillLayout;

    import org.eclipse.swt.widgets.Composite;

    public class Ch5Undoable extends Composite {

    private static final int MAX_STACK_SIZE = 25;

    private List undoStack;

    private List redoStack;

    private StyledText styledText;

    public Ch5Undoable(Composite parent) {

    super(parent, SWT.NONE);

    undoStack = new LinkedList();

    redoStack = new LinkedList();

    buildControls();

    }

    private void buildControls() {

    this.setLayout(new FillLayout());

    styledText = new StyledText(this, SWT.MULTI | SWT.V_SCROLL);

    styledText.addExtendedModifyListener(

    new ExtendedModifyListener() { //每次text被編輯的時候,都會調用此listener

    public void modifyText(ExtendedModifyEvent event) {

    String currText = styledText.getText();

    String newText = currText.substring(event.start,

    event.start + event.length); //獲得新插入的文本

    if( newText != null && newText.length() > 0 ) {

    if( undoStack.size() == MAX_STACK_SIZE ) {

    undoStack.remove( undoStack.size() - 1 );

    }

    undoStack.add(0, newText);//將新插入的文本保存到undoStack中

    }

    }

    }); //關鍵部分

    styledText.addKeyListener(new KeyAdapter() {

    public void keyPressed(KeyEvent e) {

    switch(e.keyCode) {

    case SWT.F1:

    undo(); break;

    case SWT.F2:

    redo(); break;

    default: //ignore everything else

    }

    }

    });

    }

    private void undo() {

    if( undoStack.size() > 0 ) {

    String lastEdit = (String)undoStack.remove(0);//得到要undo的字符

    int editLength = lastEdit.length();

    String currText = styledText.getText();

    int startReplaceIndex = currText.length() - editLength;

    styledText.replaceTextRange(startReplaceIndex, editLength, ""); //將最后輸入的字符替換成空

    redoStack.add(0, lastEdit);//把最后的這個undo的字符加到redoStack中

    }

    }

    private void redo() {

    if( redoStack.size() > 0 ) {

    String text = (String)redoStack.remove(0);//得到要恢復的字符

    moveCursorToEnd();

    styledText.append(text);//將要恢復的字符加至文本的最后

    moveCursorToEnd();

    }

    }

    private void moveCursorToEnd() {

    styledText.setCaretOffset(styledText.getText().length());

    }

    }

    posted on 2006-03-29 17:42 JOO 閱讀(1001) 評論(0)  編輯  收藏 所屬分類: SWT & JFace IN ACTION
    Hit the target!

    <2006年3月>
    2627281234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(2)

    隨筆分類(23)

    隨筆檔案(22)

    文章檔案(1)

    相冊

    Neighbor

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲理论电影在线观看| 亚洲国产成人久久精品99| 亚洲黄色在线观看| 日韩在线永久免费播放| 亚洲精品高清国产一久久| 日本在线看片免费人成视频1000| 中文字幕一精品亚洲无线一区| 一级毛片在线完整免费观看| 亚洲色婷婷综合开心网| 中文字幕无码免费久久| 久热综合在线亚洲精品| 99爱在线观看免费完整版| 亚洲国产精品久久网午夜| 最近免费中文字幕视频高清在线看| 亚洲综合激情五月色一区| 日本大片在线看黄a∨免费| 亚洲AV网一区二区三区| 亚洲精品国产va在线观看蜜芽| www在线观看免费视频| 亚洲精品V欧洲精品V日韩精品| 一级毛片免费观看| 亚洲一线产区二线产区精华| 好吊妞788免费视频播放| 四虎精品免费永久免费视频| 亚洲人成网站在线播放vr| 中文字幕在线免费| www亚洲精品久久久乳| 国产国拍精品亚洲AV片| 91成年人免费视频| 老妇激情毛片免费| 亚洲va久久久噜噜噜久久狠狠| 免费成人激情视频| 日本在线观看免费高清| 久久久无码精品亚洲日韩蜜桃| 99久久国产热无码精品免费| 久久久久久亚洲精品无码| 国产亚洲精品精华液| 国产在线观看免费观看不卡| 人成电影网在线观看免费| 亚洲一区电影在线观看| 亚洲乱码日产精品a级毛片久久|