Skip to content

Org.eclipse.swt.graphics.Image

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

SWT에서 Normal상태의 이미지와 Pressed상태의 이미지를 출력하며, onClick Listener를 적용한 Custom Widget은 아래와 같다.

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;
    }
}

아래와 같이 사용하면 된다.

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