<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
       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    [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點的坐標變?yōu)?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片在线观看 | 在线观看人成视频免费无遮挡| 久久精品国产99精品国产亚洲性色| 国产91色综合久久免费| 女bbbbxxxx另类亚洲| 亚洲国产美女精品久久久久∴| 色影音免费色资源| 猫咪免费人成在线网站| 国产成人A人亚洲精品无码| 我要看WWW免费看插插视频| 中文字幕在线观看免费| 亚洲一级毛片在线播放| 亚洲精品无码永久在线观看| 亚洲毛片免费视频| 人体大胆做受免费视频| 亚洲春色在线观看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久不见久久见中文字幕免费| 一进一出60分钟免费视频| 亚洲欧洲日产国码www| 亚洲成a人片在线播放| 2022久久国产精品免费热麻豆| 一区二区在线免费视频| 亚洲an日韩专区在线| 亚洲精品自产拍在线观看| 国内大片在线免费看| 国产成人免费视频| 免费一级毛suv好看的国产网站| 亚洲理论片在线观看| 亚洲午夜未满十八勿入网站2| 亚洲精品视频在线免费| 亚洲av色香蕉一区二区三区| 亚洲午夜精品一区二区| 亚洲免费在线观看| 免费无码看av的网站| 国产成人免费高清激情明星| 日本一区午夜艳熟免费| 香港一级毛片免费看| 亚洲欧洲国产综合AV无码久久| 亚洲最大福利视频网站|