Use of Java2D on SWT or Draw2D graphical context

Use of Java2D on SWT or Draw2D graphical context : 2D « SWT JFace Eclipse « Java

 

SWTTest.png

 

 

/* * ----------------------------------------------------------------------------- * (c) Copyright IBM Corp. 2004 All rights reserved. * * The sample program(s) is/are owned by International Business Machines * Corporation or one of its subsidiaries ("IBM") and is/are copyrighted and * licensed, not sold. * * You may copy, modify, and distribute this/these sample program(s) in any form * without payment to IBM, for any purpose including developing, using, * marketing or distributing programs that include or are derivative works of * the sample program(s). * * The sample program(s) is/are provided to you on an "AS IS" basis, without * warranty of any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER * EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do * not allow for the exclusion or limitation of implied warranties, so the above * limitations or exclusions may not apply to you. IBM shall not be liable for * any damages you suffer as a result of using, modifying or distributing the * sample program(s) or its/their derivatives. * * Each copy of any portion of this/these sample program(s) or any derivative * work, must include the above copyright notice and disclaimer of warranty. * * ----------------------------------------------------------------------------- */

import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class SWTTest {

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setSize(350, 350);
    shell.setLayout(new GridLayout());
    Canvas canvas = new Canvas(shell, SWT.NO_BACKGROUND);
    GridData data = new GridData(GridData.FILL_BOTH);
    canvas.setLayoutData(data);

    final Graphics2DRenderer renderer = new Graphics2DRenderer();

    canvas.addPaintListener(new PaintListener() {
      public void paintControl(PaintEvent e) {
        Point controlSize = ((Control) e.getSource()).getSize();

        GC gc = e.gc; // gets the SWT graphics context from the event
        renderer.prepareRendering(gc); // prepares the Graphics2D         // renderer
        // gets the Graphics2D context and switch on the antialiasing         Graphics2D g2d = renderer.getGraphics2D();
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        // paints the background with a color gradient         g2d.setPaint(new GradientPaint(0.0f, 0.0f,
            java.awt.Color.yellow, (float) controlSize.x,
            (float) controlSize.y, java.awt.Color.white));
        g2d.fillRect(0, 0, controlSize.x, controlSize.y);

        // draws rotated text         g2d.setFont(new java.awt.Font("SansSerif", java.awt.Font.BOLD,
            16));
        g2d.setColor(java.awt.Color.blue);

        g2d.translate(controlSize.x / 2, controlSize.y / 2);
        int nbOfSlices = 18;
        for (int i = 0; i < nbOfSlices; i++) {
          g2d.drawString("Angle = " + (i * 360 / nbOfSlices)
              + "\u00B0", 30, 0);
          g2d.rotate(-2 * Math.PI / nbOfSlices);
        }

        // now that we are done with Java2D, renders Graphics2D         // operation         // on the SWT graphics context         renderer.render(gc);

        // now we can continue with pure SWT paint operations         gc.drawOval(0, 0, controlSize.x, controlSize.y);

      }
    });

    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
    renderer.dispose();
    System.exit(0);
  }
}

/* * ----------------------------------------------------------------------------- * (c) Copyright IBM Corp. 2004 All rights reserved. * * The sample program(s) is/are owned by International Business Machines * Corporation or one of its subsidiaries ("IBM") and is/are copyrighted and * licensed, not sold. * * You may copy, modify, and distribute this/these sample program(s) in any form * without payment to IBM, for any purpose including developing, using, * marketing or distributing programs that include or are derivative works of * the sample program(s). * * The sample program(s) is/are provided to you on an "AS IS" basis, without * warranty of any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER * EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do * not allow for the exclusion or limitation of implied warranties, so the above * limitations or exclusions may not apply to you. IBM shall not be liable for * any damages you suffer as a result of using, modifying or distributing the * sample program(s) or its/their derivatives. * * Each copy of any portion of this/these sample program(s) or any derivative * work, must include the above copyright notice and disclaimer of warranty. * * ----------------------------------------------------------------------------- */

/** * Helper class allowing the use of Java2D on SWT or Draw2D graphical context. * * @author Yannick Saillet */

class Graphics2DRenderer {
  private static final PaletteData PALETTE_DATA = new PaletteData(0xFF0000,
      0xFF00, 0xFF);

  private BufferedImage awtImage;

  private Image swtImage;

  private ImageData swtImageData;

  private int[] awtPixels;

  /** RGB value to use as transparent color */
  private static final int TRANSPARENT_COLOR = 0x123456;

  /** * Prepare to render on a SWT graphics context. */
  public void prepareRendering(GC gc) {
    org.eclipse.swt.graphics.Rectangle clip = gc.getClipping();
    prepareRendering(clip.x, clip.y, clip.width, clip.height);
  }

  /** * Prepare to render on a Draw2D graphics context. */
  public void prepareRendering(org.eclipse.draw2d.Graphics graphics) {
    org.eclipse.draw2d.geometry.Rectangle clip = graphics
        .getClip(new org.eclipse.draw2d.geometry.Rectangle());
    prepareRendering(clip.x, clip.y, clip.width, clip.height);
  }

  /** * Prepare the AWT offscreen image for the rendering of the rectangular * region given as parameter. */
  private void prepareRendering(int clipX, int clipY, int clipW, int clipH) {
    // check that the offscreen images are initialized and large enough     checkOffScreenImages(clipW, clipH);
    // fill the region in the AWT image with the transparent color     java.awt.Graphics awtGraphics = awtImage.getGraphics();
    awtGraphics.setColor(new java.awt.Color(TRANSPARENT_COLOR));
    awtGraphics.fillRect(clipX, clipY, clipW, clipH);
  }

  /** * Returns the Graphics2D context to use. */
  public Graphics2D getGraphics2D() {
    if (awtImage == null)
      return null;
    return (Graphics2D) awtImage.getGraphics();
  }

  /** * Complete the rendering by flushing the 2D renderer on a SWT graphical * context. */
  public void render(GC gc) {
    if (awtImage == null)
      return;

    org.eclipse.swt.graphics.Rectangle clip = gc.getClipping();
    transferPixels(clip.x, clip.y, clip.width, clip.height);
    gc.drawImage(swtImage, clip.x, clip.y, clip.width, clip.height, clip.x,
        clip.y, clip.width, clip.height);
  }

  /** * Complete the rendering by flushing the 2D renderer on a Draw2D graphical * context. */
  public void render(org.eclipse.draw2d.Graphics graphics) {
    if (awtImage == null)
      return;

    org.eclipse.draw2d.geometry.Rectangle clip = graphics
        .getClip(new org.eclipse.draw2d.geometry.Rectangle());
    transferPixels(clip.x, clip.y, clip.width, clip.height);
    graphics.drawImage(swtImage, clip.x, clip.y, clip.width, clip.height,
        clip.x, clip.y, clip.width, clip.height);
  }

  /** * Transfer a rectangular region from the AWT image to the SWT image. */
  private void transferPixels(int clipX, int clipY, int clipW, int clipH) {
    int step = swtImageData.depth / 8;
    byte[] data = swtImageData.data;
    awtImage.getRGB(clipX, clipY, clipW, clipH, awtPixels, 0, clipW);
    for (int i = 0; i < clipH; i++) {
      int idx = (clipY + i) * swtImageData.bytesPerLine + clipX * step;
      for (int j = 0; j < clipW; j++) {
        int rgb = awtPixels[j + i * clipW];
        for (int k = swtImageData.depth - 8; k >= 0; k -= 8) {
          data[idx++] = (byte) ((rgb >> k) & 0xFF);
        }
      }
    }
    if (swtImage != null)
      swtImage.dispose();
    swtImage = new Image(Display.getDefault(), swtImageData);
  }

  /** * Dispose the resources attached to this 2D renderer. */
  public void dispose() {
    if (awtImage != null)
      awtImage.flush();
    if (swtImage != null)
      swtImage.dispose();
    awtImage = null;
    swtImageData = null;
    awtPixels = null;
  }

  /** * Ensure that the offscreen images are initialized and are at least as * large as the size given as parameter. */
  private void checkOffScreenImages(int width, int height) {
    int currentImageWidth = 0;
    int currentImageHeight = 0;
    if (swtImage != null) {
      currentImageWidth = swtImage.getImageData().width;
      currentImageHeight = swtImage.getImageData().height;
    }

    // if the offscreen images are too small, recreate them     if (width > currentImageWidth || height > currentImageHeight) {
      dispose();
      width = Math.max(width, currentImageWidth);
      height = Math.max(height, currentImageHeight);
      awtImage = new BufferedImage(width, height,
          BufferedImage.TYPE_INT_ARGB);
      swtImageData = new ImageData(width, height, 24, PALETTE_DATA);
      swtImageData.transparentPixel = TRANSPARENT_COLOR;
      awtPixels = new int[width * height];
    }
  }
}


 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

[출처] http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/UseofJava2DonSWTorDraw2Dgraphicalcontext.htm

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
49 JAVA SWT TEST 자료 졸리운_곰 2015.05.07 546
48 [SWING] 분석에 도전해볼만한 오픈소스 WebHarvest Java WebCrawler GUI file 졸리운_곰 2015.05.20 518
47 [SWT] MessageBox Example file 졸리운_곰 2015.08.16 380
46 SWT JAVA 동적으로 컨트롤을 추가하는 다이얼로그 졸리운_곰 2015.04.27 271
45 Demonstrates TreeViewer file 졸리운_곰 2015.08.05 258
44 JAVA SWT XML EDITOR sample : 자바 SWT XML 에디터 예제 file 졸리운_곰 2015.05.12 241
43 SWT 2D Chart: Flowchart : 2D « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 232
42 SWT 스크롤 ScrolledComposite file 졸리운_곰 2015.05.03 230
41 [SWT, Java], Button by Image, 이미지로 버튼 생성 졸리운_곰 2015.08.22 204
40 SWT Control in One Example file 졸리운_곰 2015.08.10 193
39 SWT Tree With Multi columns file 졸리운_곰 2015.08.06 152
38 JAVA SWT 대화상자 예제 : 동적으로 컨트롤을 추가하고 삭제하는 예제 졸리운_곰 2015.05.11 140
37 SWT JAVA 동적으로 컨트롤을 추가하는 다이얼로그2 file 졸리운_곰 2015.04.27 139
36 A simple Java console: 졸리운_곰 2015.04.24 131
» Use of Java2D on SWT or Draw2D graphical context : 2D « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 130
34 Java SWT 소개 file 졸리운_곰 2015.03.30 127
33 JAVA SWT LINUX (Ubuntu) 에서 SWT Browser Control 사용시 졸리운_곰 2015.05.10 120
32 Eclipse RCP Tutorial: How to Add a Progress Bar file 졸리운_곰 2015.11.07 119
31 Building and delivering a table editor with SWT/JFace file 졸리운_곰 2019.06.16 110
30 Demonstrates TreeEditor : Tree « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 109
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED