<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
    graphic context就象Control最頂層的畫板,它可以使你向GUI components加入客制化的圖形,圖片,及不同字體的文本。同樣也提供事件處理

    graphic context是在GC類中的,GC對象是附著于現存的Controls。

    要創建一個graphically oriented的應用程序,首先要創建graphic context,并將其與一個component相關聯,這兩步都可通過GC的constructor來實現。共有2個構造函數,見下:
    1. GC(Drawable)--Creates a GC and configures it for the Drawable object
    2. GC(Drawable, int)--Creates and configures a GC and sets the text-display style,第二個參數可以是RIGHT_TO_LEFT或LEFT_TO_RIGHT(默認值);
    第一個參數需要實現Drawable接口的對象, 此接口包含了與graphic context.內部相聯系的方法。SWT提供了三個實現Drawable接口的類:Image, Device,?和 Control.


    Control子類雖然都能包含圖形,但只有一個類是特別適合GC對象的:Canvas。它不僅提供了一個Composite的containment property,還可以用一系列的風格來定義圖形在此區域內如何顯示

    示例:

    package com.swtjface.Ch7;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.graphics.*;
    import org.eclipse.swt.widgets.*;
    public class DrawExample
    {
    public static void main (String [] args)
    {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Drawing Example");
    Canvas canvas = new Canvas(shell, SWT.NONE);
    canvas.setSize(150, 150);
    canvas.setLocation(20, 20);//在shell中創建canvas
    shell.open ();
    shell.setSize(200,220);
    GC gc = new GC(canvas);//在canvas中創建graphic context
    gc.drawRectangle(10, 10, 40, 45);
    gc.drawOval(65, 10, 30, 35);
    gc.drawLine(130, 10, 90, 80);
    gc.drawPolygon(new int[] {20, 70, 45, 90, 70, 70});
    gc.drawPolyline(new int[] {10,120,70,100,100,130,130,75});
    gc.dispose();//釋放Color對象
    while (!shell.isDisposed())
    {
    ?if (!display.readAndDispatch())
    ?display.sleep();
    ?}
    ?display.dispose();
    ?}
    ?}
    有兩點需要注意:1.在調用shell.open()之前構建Canvas對象,然后在調用shell.open()之后創建和使用GC對象
    ???????????????????? 2.在使用完之后一定要立即釋放GC object
    如上例所示GC提供了一系列在Drawable對象上畫圖形的方法,如下:


    但是上例中有個問題:當shell被變灰過或者最小化過之后,圖形就會被擦去。所以我們需要解決的事,無論window怎么變化,圖形都保持可見。因此SWT在一個Drawable對象被刷新后讓你自行控制。這個更新的過程就被稱為painting


    Painting and PaintEvents

    當一個GC方法在一個Drawabel對象上畫出一個圖案,它僅執行這個painting過程一次。如果用戶改變對象尺寸或是用另一個窗口去覆蓋它,則圖形會被消除。因此,應用程序能否在外界事件影響下維持其外觀這一點相當重要。

    這些外部事件被稱為PaintEvents,接收它們的程序接口是PaintListener。一個Control在任何時候當其外觀被應用程序或是外界活動改變都會觸發一個PaintEvent。這些類對于事件和監聽器的使用方式都和我們在第四章內提到的類似。由于PaintListener只有一個事件處理方法,所以不需要使用adapter類

    Canvas canvas = new Canvas(shell, SWT.NONE);
    canvas.setSize(150, 150);
    canvas.setLocation(20, 20);
    canvas.addPaintListener(new PaintListener()
    {
    public void paintControl(PaintEvent pe)
    {
    GC gc = pe.gc;//每一個PaintEvent對象都包含有其自己的GC
    gc.drawPolyline(new int[] {10,120,70,100,100,130,130,75});
    }
    });
    shell.open();

    每一個PaintEvent對象都包含有其自己的GC,主要有2個原因:1.因為這個GC instance是由事件產生的,所以PaintEvent會負責釋放他。2.應用程序可以在shell open之前創建GC,這樣可以使圖形在一個獨立的類中被創建。


    SWTPaintListener接口內優化painting過程,SWT的開發者強烈建議Controlpainting僅對PaintEvent作出反應。如果一個應用程序因為其他原因必須更新其圖形,則他們推薦使用controlredraw()方法,這會在隊列中加入一個paint請求。之后,你可以調用update()方法來處理所有的綁定于該對象的paint請求。

    需要牢記的是,雖然對于Control對象推薦在一個PaintListener內painting,但是由于Device和Image對象并不能在該接口內使用。如果你需要在一個image或device內生成圖形,你必須單獨地生成一個GC對象并在使用結束后將其銷毀。

    posted on 2006-04-14 11:26 JOO 閱讀(550) 評論(0)  編輯  收藏 所屬分類: SWT & JFace IN ACTION
    Hit the target!

    <2006年4月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    常用鏈接

    留言簿(2)

    隨筆分類(23)

    隨筆檔案(22)

    文章檔案(1)

    相冊

    Neighbor

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 91精品免费久久久久久久久| 国产一精品一AV一免费| 手机在线毛片免费播放| 亚洲一级大黄大色毛片| 嘿嘿嘿视频免费网站在线观看| 久久国产亚洲高清观看| 亚洲一区二区三区免费在线观看| 亚洲国产精品久久| **aaaaa毛片免费同男同女| 亚洲免费视频观看| 18禁成年无码免费网站无遮挡 | 久久精品成人免费观看| 亚洲久本草在线中文字幕| 最近中文字幕mv免费高清视频8| 亚洲综合色丁香麻豆| 亚洲成人免费网址| 亚洲中文无码永久免费| 全黄a免费一级毛片人人爱| 亚洲精品视频免费| 亚洲AV日韩AV天堂一区二区三区| 日韩电影免费观看| 亚洲AV综合色区无码二区爱AV| 精品国产麻豆免费网站| 国产精品福利在线观看免费不卡| 中文字幕亚洲不卡在线亚瑟| 日本免费中文字幕| 亚洲人成77777在线播放网站不卡| 国产成人免费网站在线观看| 国产高潮流白浆喷水免费A片 | 蜜芽亚洲av无码精品色午夜| 在线观看人成网站深夜免费| 精品人妻系列无码人妻免费视频| 亚洲伊人tv综合网色| 日本一道一区二区免费看| aaa毛片免费观看| 亚洲人成网网址在线看| 亚洲女人被黑人巨大进入| 亚洲免费在线视频播放| 一级毛片a免费播放王色电影 | 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲AV无码专区在线观看成人|