Skip to content
Search

Org.eclipse.swt.graphics.Image

lastmod 2025-02-14created 2014-05-235 edits

Instances of this class are graphics which have been prepared for display on a specific device. That is, they are ready to paint using methods such as GC.drawImage() and display on widgets with, for example, Button.setImage().

If loaded from a file format that supports it, an Image may have transparency, meaning that certain pixels are specified as being transparent when drawn. Examples of file formats that support transparency are GIF and PNG.

Custom Image Button

A custom widget in SWT that draws a Normal-state image and a Pressed-state image and applies an onClick Listener looks like this.

package com.my.ledpowermgr.widget;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.TypedListener;

/**
 * SWT ImageView(Button) Widget.
 * 
 * @author your
 * @since 140524
 */
public class ImageView extends Canvas {

    private Image _normalImage = null;
    private Image _pressedImage = null;

    private boolean _isLeftMouseButtonPressed = false;

    public ImageView(Composite parent, int style) {
        super(parent, style);

        addPaintListener(new PaintListener() {
            @Override
            public void paintControl(PaintEvent e) {
                if (_isLeftMouseButtonPressed == true) {
                    if (_pressedImage != null) {
                        e.gc.drawImage(_pressedImage, 0, 0);
                    }
                } else {
                    if (_normalImage != null) {
                        e.gc.drawImage(_normalImage, 0, 0);
                    }
                }
            }
        });

        addMouseListener(new MouseListener() {
            @Override
            public void mouseUp(MouseEvent e) {
                if (e.button == 1) {
                    _isLeftMouseButtonPressed = false;
                    redraw();
                    if (contains(e.x, e.y) == true) {
                        ImageView.this.notifyListeners(SWT.Selection, new Event());
                    }
                }
            }

            @Override
            public void mouseDown(MouseEvent e) {
                if (e.button == 1) {
                    _isLeftMouseButtonPressed = true;
                    redraw();
                }
            }

            @Override
            public void mouseDoubleClick(MouseEvent e) {
            }
        });
    }

    private boolean contains(int x, int y) {
        if (x >= 0 && y >= 0 && x <= getSize().x && y <= getSize().y) {
            return true;
        }
        return false;
    }

    public void addSelectionListener(SelectionListener listener) {
        if (listener == null) {
            throw new SWTError(SWT.ERROR_NULL_ARGUMENT);
        }
        addListener(SWT.Selection, new TypedListener(listener));
    }

    public void setImage(Image normal, Image pressed) {
        setBounds(normal.getBounds());
        _normalImage = normal;
        _pressedImage = pressed;
    }
}

Use it as follows.

ImageView serialSetting = new ImageView(topComposite, SWT.TRANSPARENT);
serialSetting.setImage(SWTResourceManager.getImage(Main.class,
        "/com/my/ledpowermgr/res/setting_icon_normal.png"), SWTResourceManager
        .getImage(Main.class, "/com/my/ledpowermgr/res/setting_icon_pressed.png"));
GridData gd_setting = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1);
gd_setting.widthHint = serialSetting.getSize().x;
gd_setting.heightHint = serialSetting.getSize().y;
serialSetting.setLayoutData(gd_setting);
serialSetting.addSelectionListener(new SelectionListener() {
    @Override
    public void widgetSelected(SelectionEvent e) {
    }

    @Override
    public void widgetDefaultSelected(SelectionEvent e) {
        // Empty.
    }
});

Favorite site

References


  1. Taking_a_look_at_SWT_Images.pdf ↩

author Zer0 sitemap