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

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

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

    kooyee ‘s blog

    開源軟件, 眾人努力的結晶, 全人類的共同財富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    [SWT] Canvas scroll 滾動條

    Posted on 2007-07-25 19:47 kooyee 閱讀(3480) 評論(0)  編輯  收藏 所屬分類: GUI骨衣
    scroll(int destX, int destY, int x, int y, int width, int height, boolean all) 

              
    //Scrolls a rectangular area of the receiver by first copying the source area to the destination and then causing the area of the source which is not covered by the destination to be repainted. 

    以origin(0,0)作為原點滾動,否則在滾動中會變形

    public static void main (String [] args) {
    >     Display display = new Display ();
    >     Shell shell = new Shell (display);
    >     shell.setLayout(new FillLayout());
    >     final Point origin = new Point (00);
    >     final Canvas canvas = new Canvas (shell,SWT.V_SCROLL | SWT.H_SCROLL);
    >     final int width = 500;
    >     final ScrollBar hBar = canvas.getHorizontalBar ();
    >     final Color red = new Color(null,255,0,0);
    >     hBar.setMaximum(width);
    >     hBar.addListener (SWT.Selection, new Listener () {
    >
    >         public void handleEvent (Event e) {
    >         System.out.println("HBar listener");
    >             int hSelection = hBar.getSelection ();
    >             int destX = -hSelection - origin.x;
    >             canvas.scroll (destX, 000, width, 100true);
    >             origin.x = -hSelection;
    >             System.out.println("HBar listener exit");
    >         }

    >     }
    );
    >     final ScrollBar vBar = canvas.getVerticalBar ();
    >     vBar.setMaximum(100);
    >     vBar.addListener (SWT.Selection, new Listener () {
    >         public void handleEvent (Event e) {
    >             int vSelection = vBar.getSelection ();
    >             int destY = -vSelection - origin.y;
    >             canvas.scroll (0, destY, 00, width, 100true);
    >             origin.y = -vSelection;
    >         }

    >     }
    );
    >     canvas.addListener (SWT.Paint, new Listener () {
    >
    >     boolean init = true;
    >     public void handleEvent (Event e) {
    >     System.out.println("Paint listener");
    >
    >             GC gc = e.gc;
    >             gc.setBackground(red);
    >                 gc.fillRectangle(origin.x,origin.y,width,100);
    >                 gc.drawText ("test", origin.x, origin.y);
    >
    >
    >         }

    >     }
    );
    >     shell.setSize (500150);
    >     shell.open ();
    >     while (!shell.isDisposed ()) {
    >         if (!display.readAndDispatch ()) display.sleep ();
    >     }

    >     display.dispose ();
    > }


    要是用GC畫圖的話,一定要加上origin.x和origin.y. 這樣才會在新的redraw()的圖形中把矩形顯示在相應位置
    //x,y 矩形的起點坐標
    gc.fillRectangle(origin.x+x,origin.y+y,595,842);

    例如 設矩形起點(50,50)和origin(0,0), 滾動后origin點的坐標變為(0,-10)。這樣origin.x+x,origin.y+y 后矩形的新的起點為(50,40),然后GC在新的起點(50,40)畫出圖形, 這樣顯示出來的矩形就向上移動了10個像素。(如果對起點的x,y的值進行運算,沒有必要改動origin.x和origin.y,分開考慮。 )
    比如畫3個上下間隔為100的矩形
    gc.fillRectangle(origin.x+x,origin.y+y,595,842);
       y += 100;
    gc.fillRectangle(origin.x
    +x,origin.y+y,595,842);
       y += 100;
    gc.fillRectangle(origin.x
    +x,origin.y+y,595,842);

    主站蜘蛛池模板: 中文字幕亚洲一区| 亚洲av成人一区二区三区在线观看| 亚洲乱亚洲乱少妇无码| 含羞草国产亚洲精品岁国产精品| 无人在线直播免费观看| 国产亚洲欧美在线观看| 精品成在人线AV无码免费看 | 你是我的城池营垒免费看| 亚洲AV无码一区二区三区在线观看 | 特级做A爰片毛片免费69 | 国产精品视频全国免费观看| 亚洲成AV人片在WWW| 久久免费视频一区| 国产偷国产偷亚洲清高动态图| 一区二区三区免费电影| 国产成人亚洲精品影院| 在线免费观看伊人三级电影| 亚洲av午夜成人片精品网站 | 久久久久久久久免费看无码| 亚洲精品天堂在线观看| 国产精品jizz在线观看免费| 男人扒开添女人下部免费视频| 国产亚洲精品拍拍拍拍拍| 午夜影院免费观看| 亚洲综合精品第一页| 亚洲A丁香五香天堂网| 在线毛片片免费观看| 亚洲免费中文字幕| yy6080久久亚洲精品| 国产精品99久久免费观看| 99久久婷婷国产综合亚洲| 国产女高清在线看免费观看| 国产精品无码免费专区午夜| 337p日本欧洲亚洲大胆精品555588| 在线a级毛片免费视频| 狼色精品人妻在线视频免费| 亚洲电影一区二区三区| 午夜免费福利影院| 香蕉视频在线免费看| 色婷五月综激情亚洲综合| 亚洲中文字幕伊人久久无码|