<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個(gè):Text和StyledText.后者可以為文本和control本身設(shè)定顏色,格式等。這兩個(gè)control之間毫無(wú)關(guān)聯(lián),除了都是Composite的子類(lèi)之外。

    • 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() { //每當(dāng)text被改變,任何以注冊(cè)的VerifyListeners便會(huì)被調(diào)用。此處每按一次鍵盤(pán),此方法就被調(diào)用。如果是同時(shí)輸入多個(gè)字符,也調(diào)用一次

    public void verifyText(VerifyEvent e) {

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

    e.doit = false;

    } //如果文本以1開(kāi)頭,即不允許編輯

    else {

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

    }

    }

    });

    }

    }

    Text的重要方法,見(jiàn)下圖

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

    • The StyledText widget

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

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

    可以通過(guò)使用一個(gè)StyledText的StyleRanges來(lái)改變顯示的風(fēng)格

    StyleRange
    StyledText通過(guò)使用StyleRange類(lèi)來(lái)管理當(dāng)前所顯示的不同styles。其所有的欄位都是public的可隨意修改,但是要一直到當(dāng)此StyledText實(shí)例的setStyleRange()被調(diào)用之后才會(huì)生效。

    StyleRanges通過(guò)開(kāi)始偏移量和長(zhǎng)度來(lái)設(shè)定text的區(qū)域范圍。
    StyleRange可設(shè)定背景和前景色,默認(rèn)為null,還可設(shè)定字體,SWT.NORMAL 或者SWT.BOLD.

    similarTo()可用來(lái)判斷兩個(gè)StyleRange實(shí)例是否有同樣的前景、背景和字體。

    當(dāng)我們保存text之后,可通過(guò)styledText.getStyleRanges()來(lái)獲取style信息,此函數(shù)會(huì)返回an array of StyleRange


    toggleBold()--將已輸入的文本在bold和normal之間切換,是被一個(gè)KeyListener調(diào)用的,此KeyListener會(huì)監(jiān)聽(tīng)F1是否被按下

    A StyledText example
    復(fù)制、粘貼功能不需要通過(guò)代碼便可使用,是和platform的標(biāo)準(zhǔn)鍵盤(pán)快捷方式相關(guān)聯(lián)的

    ExtendedModifyListener和ModifyListener不同,前者提供了關(guān)于what was done的event細(xì)節(jié),而后者只是當(dāng)編輯懂作產(chǎn)生時(shí)notify,不會(huì)去準(zhǔn)確的辨別到底何種修改發(fā)生了。

    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被編輯的時(shí)候,都會(huì)調(diào)用此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中

    }

    }

    }); //關(guān)鍵部分

    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);//把最后的這個(gè)undo的字符加到redoStack中

    }

    }

    private void redo() {

    if( redoStack.size() > 0 ) {

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

    moveCursorToEnd();

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

    moveCursorToEnd();

    }

    }

    private void moveCursorToEnd() {

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

    }

    }

    posted on 2006-03-29 17:42 JOO 閱讀(1000) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): SWT & JFace IN ACTION

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    Hit the target!

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

    常用鏈接

    留言簿(2)

    隨筆分類(lèi)(23)

    隨筆檔案(22)

    文章檔案(1)

    相冊(cè)

    Neighbor

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 人妻无码久久一区二区三区免费 | 免费观看又污又黄在线观看| 亚洲av高清在线观看一区二区 | 国产精品免费无遮挡无码永久视频| 亚洲精品综合久久中文字幕| 国产自产拍精品视频免费看| baoyu777永久免费视频| 亚洲videos| 国产L精品国产亚洲区久久| 亚洲免费在线观看视频| 美女被暴羞羞免费视频| 亚洲精品美女在线观看| 四虎影在线永久免费四虎地址8848aa| 99精品全国免费观看视频..| 亚洲www77777| 亚洲国产精品lv| 亚洲av午夜精品一区二区三区| 狼群影院在线观看免费观看直播| 免费观看又污又黄在线观看| 亚洲人成人77777在线播放| 亚洲人成中文字幕在线观看| 成全影视免费观看大全二| 野花香高清在线观看视频播放免费| 中文有码亚洲制服av片| 婷婷亚洲综合五月天小说| va亚洲va日韩不卡在线观看| 希望影院高清免费观看视频| 一区二区三区无码视频免费福利| 激情婷婷成人亚洲综合| 国产成人精品日本亚洲直接| 亚洲色图在线观看| 伊人久久精品亚洲午夜| 国产一级高清免费观看| 最近2019中文字幕免费看最新| 免费在线看黄网站| 久久久久免费视频| 美女露隐私全部免费直播| 亚洲精品美女网站| 亚洲成av人片在线看片| 亚洲国产精品热久久| 亚洲国产精品无码中文字|