<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);

    主站蜘蛛池模板: 国产特级淫片免费看| 免费大片黄在线观看yw| 亚洲国产精品嫩草影院久久| 亚洲夂夂婷婷色拍WW47| 女人被免费视频网站| 亚洲AV成人精品日韩一区| 在线免费观看韩国a视频| 国产精品手机在线亚洲| 亚洲成人影院在线观看| 三年在线观看免费观看完整版中文| 国产亚洲美女精品久久久| 国产羞羞的视频在线观看免费| 亚洲av无码专区在线播放 | 亚洲女初尝黑人巨高清| 久久国产精品成人免费| 精品亚洲成AV人在线观看| 中文字幕影片免费在线观看| 亚洲GV天堂GV无码男同| 久久久久亚洲精品中文字幕| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲一区二区三区在线网站| 日韩在线视频免费看| www免费黄色网| 亚洲AV人人澡人人爽人人夜夜| 114一级毛片免费| 在线亚洲v日韩v| 亚洲AV无码国产丝袜在线观看| 中文字幕免费在线看线人| 亚洲av无码一区二区三区人妖 | 久久久亚洲裙底偷窥综合| 成人免费无码大片A毛片抽搐色欲| 国产精品亚洲一区二区三区在线观看 | 精品免费久久久久国产一区| 337p欧洲亚洲大胆艺术| 国产午夜免费秋霞影院| 免费播放在线日本感人片| 性xxxx黑人与亚洲| 国产亚洲美女精品久久久久狼| 成年在线观看网站免费| jizz免费在线影视观看网站| 亚洲免费在线视频播放|