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

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

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

    hengheng123456789

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks

    1、點擊鼠標左鍵在shell里畫線。

    ?public static void main(String[] args)
    ?{
    ??Display display = new Display();
    ??final Shell shell = new Shell(display);
    ??Listener listener = new Listener() {
    ???int?lastX?= 0, lastY = 0;

    ???public void handleEvent(Event event)
    ???{
    ????switch (event.type)
    ????{
    ?????case SWT.MouseMove :
    ??????if ((event.stateMask & SWT.BUTTON1) == 0)
    ???????break; // 判斷是否為鼠標左鍵,如果不是跳出
    ??????GC gc = new GC(shell);
    ??????gc.drawLine(lastX, lastY, event.x, event.y);
    ??????gc.dispose();
    ?????// FALL THROUGH
    ?????case SWT.MouseDown :
    ??????lastX = event.x;
    ??????lastY = event.y;
    ??????break;
    ????}
    ???}
    ??};
    ??shell.addListener(SWT.MouseDown, listener);
    ??shell.addListener(SWT.MouseMove, listener);
    ??shell.open();
    ??while (!shell.isDisposed())
    ??{
    ???if (!display.readAndDispatch())
    ????display.sleep();
    ??}
    ??display.dispose();
    ?}

    2、在彈出窗口中顯示表的當時圖像狀態。
    ?public static void main(String[] args) {
    ??final Display display = new Display();
    ??final Shell shell = new Shell(display);
    ??shell.setText("Widget");
    ??
    ??//建立一個簡單的表
    ??final Table table = new Table(shell, SWT.MULTI);
    ??table.setLinesVisible(true);
    ??table.setBounds(10, 10, 100, 100);
    ??for (int i = 0; i < 9; i++) {
    ???new TableItem(table, SWT.NONE).setText("item" + i);
    ??}
    ??
    ??//建立捕捉圖像的按鈕
    ??Button button = new Button(shell, SWT.PUSH);
    ??button.setText("Capture");
    ??button.pack();
    ??button.setLocation(10, 140);
    ??
    ??
    ??button.addListener(SWT.Selection, new Listener() {
    ???public void handleEvent(Event event) {
    ????Point tableSize = table.getSize();?//獲取表的大小
    ????GC gc = new GC(table);?//建立表的GC對象
    ????final Image image =
    ?????new Image(display, tableSize.x, tableSize.y);?//建立表大小的圖像image
    ????gc.copyArea(image, 0, 0);?//利用表的GC對象把表的圖像復制到image中
    ????gc.dispose();
    ????
    ????//建立一個彈出面板Shell對象popup
    ????Shell popup = new Shell(shell);
    ????popup.setText("Image");
    ????popup.addListener(SWT.Close, new Listener() {
    ?????public void handleEvent(Event e) {
    ??????image.dispose();
    ?????}
    ????});
    ????//在popup上建立畫布對象canvas
    ????Canvas canvas = new Canvas(popup, SWT.NONE);
    ????canvas.setBounds(10, 10, tableSize.x+10, tableSize.y+10);
    ????canvas.addPaintListener(new PaintListener() {
    ?????public void paintControl(PaintEvent e) {
    ??????e.gc.drawImage(image, 0, 0);?//在畫布上繪出表的圖像image
    ?????}
    ????});
    ????popup.pack();
    ????popup.open();
    ???}
    ??});
    ??shell.pack();
    ??shell.open();
    ??while (!shell.isDisposed()) {
    ???if (!display.readAndDispatch()) display.sleep();
    ??}
    ??display.dispose();
    ?}

    3、獲取整個窗口的圖像并顯示。
    ?public static void main(String[] args) {
    ??final Display display = new Display();
    ??final Shell shell = new Shell(display);
    ??shell.setLayout(new FillLayout());
    ??Button button = new Button(shell, SWT.PUSH);
    ??button.setText("Capture");
    ??button.addListener(SWT.Selection, new Listener() {
    ???public void handleEvent(Event event) {
    ????
    ????/* Take the screen shot */
    ????GC gc = new GC(display);
    ????final Image image = new Image(display, display.getBounds());
    ????gc.copyArea(image, 0, 0);
    ????gc.dispose();
    ????
    ????Shell popup = new Shell(shell, SWT.SHELL_TRIM);
    ????popup.setLayout(new FillLayout());
    ????popup.setText("Image");
    ????popup.setBounds(50, 50, 200, 200);
    ????popup.addListener(SWT.Close, new Listener() {
    ?????public void handleEvent(Event e) {
    ??????image.dispose();
    ?????}
    ????});
    ????
    ????ScrolledComposite sc = new ScrolledComposite (popup, SWT.V_SCROLL | SWT.H_SCROLL);
    ????Canvas canvas = new Canvas(sc, SWT.NONE);
    ????sc.setContent(canvas);
    ????canvas.setBounds(display.getBounds ());
    ????canvas.addPaintListener(new PaintListener() {
    ?????public void paintControl(PaintEvent e) {
    ??????e.gc.drawImage(image, 0, 0);
    ?????}
    ????});
    ????popup.open();
    ???}
    ??});
    ??shell.pack();
    ??shell.open();
    ??while (!shell.isDisposed()) {
    ???if (!display.readAndDispatch()) display.sleep();
    ??}
    ??display.dispose();
    ?}

    4、使用transform、alpha和paths混合技術繪圖。注意:必須在項目中import“swt-gdip-win32-3139.dll”。
    ?public static void main(String[] args) {
    ??final Display display = new Display();
    ??final Shell shell = new Shell(display);
    ??shell.setText("Advanced Graphics");
    ??FontData fd = shell.getFont().getFontData()[0];
    ??final Font font = new Font(display, fd.getName(), 60, SWT.BOLD | SWT.ITALIC);
    ??final Image image = new Image(display, 640, 480);
    ??final Rectangle rect = image.getBounds();
    ??GC gc = new GC(image);
    ??gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
    ??gc.fillOval(rect.x, rect.y, rect.width, rect.height);
    ??gc.dispose();
    ??shell.addListener(SWT.Paint, new Listener() {
    ???public void handleEvent(Event event) {
    ????GC gc = event.gc;????
    ????Transform tr = new Transform(display);
    ????tr.translate(50, 120);
    ????tr.rotate(-30);
    ????gc.drawImage(image, 0, 0, rect.width, rect.height, 0, 0, rect.width / 2, rect.height / 2);
    ????gc.setAlpha(100);
    ????gc.setTransform(tr);
    ????Path path = new Path(display);
    ????path.addString("SWT", 0, 0, font);
    ????gc.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
    ????gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
    ????gc.fillPath(path);
    ????gc.drawPath(path);
    ????tr.dispose();
    ????path.dispose();
    ???}???
    ??});
    ??shell.setSize(shell.computeSize(rect.width / 2, rect.height / 2));
    ??shell.open();
    ??while (!shell.isDisposed()) {
    ???if (!display.readAndDispatch())
    ????display.sleep();
    ??}
    ??image.dispose();
    ??font.dispose();
    ??display.dispose();
    ?}

    5、對圖像進行旋轉。
    ?public static void main(String[] args) {
    ??final Display display = new Display();
    ??
    ??final Image image = new Image(display, 110, 60);
    ??GC gc = new GC(image);
    ??Font font = new Font(display, "Times", 30, SWT.BOLD);
    ??gc.setFont(font);
    ??gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
    ??gc.fillRectangle(0, 0, 110, 60);
    ??gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
    ??gc.drawText("SWT", 10, 10, true);
    ??font.dispose();
    ??gc.dispose();
    ??
    ??final Rectangle rect = image.getBounds();
    ??Shell shell = new Shell(display);
    ??shell.setText("Matrix Tranformations");
    ??shell.setLayout(new FillLayout());
    ??final Canvas canvas = new Canvas(shell, SWT.DOUBLE_BUFFERED);
    ??canvas.addPaintListener(new PaintListener () {
    ???public void paintControl(PaintEvent e) {?
    ????GC gc = e.gc;
    ????gc.setAdvanced(true);
    ????if (!gc.getAdvanced()){
    ?????gc.drawText("Advanced graphics not supported", 30, 30, true);
    ?????return;
    ????}
    ????
    ????// Original image
    ????int x = 30, y = 30;
    ????gc.drawImage(image, x, y);
    ????x += rect.width + 30;
    ????
    ????Transform transform = new Transform(display);
    ????
    ????// Note that the tranform is applied to the whole GC therefore
    ????// the coordinates need to be adjusted too.
    ????
    ????// Reflect around the y axis.
    ????transform.setElements(-1, 0, 0, 1, 0 ,0);
    ????gc.setTransform(transform);
    ????gc.drawImage(image, -1*x-rect.width, y);
    ????
    ????x = 30; y += rect.height + 30;
    ????
    ????// Reflect around the x axis.
    ????transform.setElements(1, 0, 0, -1, 0, 0);
    ????gc.setTransform(transform);
    ????gc.drawImage(image, x, -1*y-rect.height);
    ????
    ????x += rect.width + 30;
    ????
    ????// Reflect around the x and y axes?
    ????transform.setElements(-1, 0, 0, -1, 0, 0);
    ????gc.setTransform(transform);
    ????gc.drawImage(image, -1*x-rect.width, -1*y-rect.height);
    ????
    ????x = 30; y += rect.height + 30;
    ????
    ????// Shear in the x-direction
    ????transform.setElements(1, 0, -1, 1, 0, 0);
    ????gc.setTransform(transform);
    ????gc.drawImage(image, 300, y);
    ????
    ????// Shear in y-direction
    ????transform.setElements(1, -1, 0, 1, 0, 0);
    ????gc.setTransform(transform);
    ????gc.drawImage(image, 150, 475);
    ????
    ????// Rotate by 45 degrees?
    ????float cos45 = (float)Math.cos(45);
    ????float sin45 = (float)Math.sin(45);
    ????transform.setElements(cos45, sin45, -sin45, cos45, 0, 0);
    ????gc.setTransform(transform);
    ????gc.drawImage(image, 350, 100);
    ????
    ????transform.dispose();
    ???}
    ??});
    ??
    ??shell.setSize(350, 550);
    ??shell.open();
    ??while (!shell.isDisposed()) {
    ???if (!display.readAndDispatch())
    ????display.sleep();
    ??}
    ??image.dispose();
    ??display.dispose();
    ?}

    posted on 2006-11-07 15:05 哼哼 閱讀(7194) 評論(2)  編輯  收藏 所屬分類: SWT

    Feedback

    # re: SWT 繪圖(GC類) 2009-06-22 13:45 geoart
    真不錯,學習了。  回復  更多評論
      

    # re: SWT 繪圖(GC類) 2011-07-14 11:55 ension
    if ((event.stateMask & SWT.BUTTON1) == 0)
    break; // 判斷是否為鼠標左鍵,如果不是跳出
    GC gc = new GC(shell);
    gc.drawLine(lastX, lastY, event.x, event.y);
    gc.dispose();


    每次執行觸發后都new一次?  回復  更多評論
      

    主站蜘蛛池模板: 久久久久亚洲av无码专区| 亚洲国产系列一区二区三区| 无码人妻丰满熟妇区免费 | 亚洲伊人久久大香线蕉AV| 国产jizzjizz免费视频| 9久久免费国产精品特黄| 亚洲狠狠ady亚洲精品大秀| 又大又黄又粗又爽的免费视频| 岛国精品一区免费视频在线观看 | 中文字幕免费视频| 国产精品久久久久久亚洲小说| 日韩亚洲人成在线综合日本| 成人免费视频网址| 成全在线观看免费观看大全| 色婷五月综激情亚洲综合| 亚洲人成色777777在线观看| 毛片a级毛片免费播放100| 精品国产免费一区二区三区香蕉| 亚洲日韩亚洲另类激情文学| 亚洲日本一区二区| 亚洲国产一区视频| 成人影片麻豆国产影片免费观看| 国产一二三四区乱码免费| 亚洲avav天堂av在线网毛片| 亚洲黄色在线电影| 亚洲精品高清国产一线久久| 在线观看免费国产视频| 99久久久国产精品免费无卡顿| 精品无码国产污污污免费网站国产| 国产亚洲精品VA片在线播放| 亚洲综合久久综合激情久久| 亚洲人AV永久一区二区三区久久| 成人免费福利电影| 国产1000部成人免费视频| 成人无码a级毛片免费| 一级一级毛片免费播放| 亚洲av日韩av永久在线观看| 国产亚洲sss在线播放| 91亚洲国产在人线播放午夜 | 成人区精品一区二区不卡亚洲| 色婷婷亚洲十月十月色天|