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 哼哼 閱讀(7205) 評論(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一次?  回復  更多評論
            

          主站蜘蛛池模板: 梁山县| 天祝| 乌苏市| 肥城市| 贵溪市| 蕉岭县| 积石山| 诸暨市| 澄江县| 丰宁| 石台县| 旺苍县| 亚东县| 游戏| 陆丰市| 开封县| 璧山县| 西和县| 盐源县| 湖口县| 永胜县| 龙州县| 江达县| 青川县| 绥阳县| 建宁县| 大安市| 来凤县| 扬州市| 开原市| 同德县| 文成县| 嵊泗县| 古浪县| 洪泽县| 潢川县| 乐昌市| 南开区| 鄂伦春自治旗| 许昌县| 志丹县|