Java SWT – Slider

Slider là đối tượng mà user có thể di chuyển con chạy trong vùng giới hạn. Ví dụ dưới đây minh họa Speaker.

Image được sử dụng trong ví dụ này, download tại đây

File SliderEX.java

package vncoding;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Slider;


public class SliderEx {

    private Shell shell;
    private Label label;
    private Image mute;
    private Image min;
    private Image med;
    private Image max;


    public SliderEx(Display display) {
        initUI(display);
    }

    private void loadImages() {
        Device dev = shell.getDisplay();
        try {
            mute = new Image(dev, "mute.png");
            min = new Image(dev, "min.png");
            med = new Image(dev, "med.png");
            max = new Image(dev, "max.png");

        } catch(Exception e) {

            System.out.println("Cannot load images");
            System.out.println(e.getMessage());
            System.exit(1);
        }       
    }


    private void initUI(Display display) {

        shell = new Shell(display, SWT.SHELL_TRIM | SWT.CENTER);

        loadImages();

        RowLayout layout = new RowLayout();
        layout.marginLeft = 30;
        layout.marginTop = 30;
        layout.spacing = 30;
        layout.fill = true;
        shell.setLayout(layout);

        Slider slider = new Slider(shell, SWT.HORIZONTAL);
        slider.setMaximum(100);
        slider.setLayoutData(new RowData(180, -1));

        label = new Label(shell, SWT.IMAGE_PNG);
        label.setImage(mute);

        slider.addListener(SWT.Selection, event -> onSelection(slider));
        
        shell.setText("Slider");
        shell.setSize(350, 200);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
    
    private void onSelection(Slider slider) {
        
        int value = slider.getSelection();

        if (value == 0) {
            label.setImage(mute);
            label.pack();
        } else if (value > 0 && value <= 30) { 
            label.setImage(min); 
        } else if (value > 30 && value < 80) {
            label.setImage(med);
        } else {
            label.setImage(max);
        }               
    }

    @Override
    public void finalize() {

        mute.dispose();
        med.dispose();
        min.dispose();
        max.dispose();
    }

    public static void main(String[] args) {

        Display display = new Display();
        SliderEx ex = new SliderEx(display);
        ex.finalize();
        display.dispose();
    }
}

Giải thích:
Trong ví dụ này, user kéo con trượt làm thay đổi image. Mình họa việc tăng/giảm Speaker.

try {        
    mute = new Image(dev, "mute.png");
    min = new Image(dev, "min.png");
    med = new Image(dev, "med.png");
    max = new Image(dev, "max.png");
} catch(Exception e) {        
    System.out.println("Cannot load images");
    System.out.println(e.getMessage());
    System.exit(1);
}

Load ảnh từ ổ đĩa (đặt ảnh trong project folder). Nếu đặt ở đường dẫn khác cần chỉ định đường dẫn tuyệt đối của file ảnh.

Slider slider = new Slider(shell, SWT.HORIZONTAL);
slider.setMaximum(100);

Tạo slider theo phương ngang với giá trị max = 100

label = new Label(shell, SWT.IMAGE_PNG);
label.setImage(mute);

Với tham số SWT.IMAGE_PNG, Label hiển thị ảnh .PNG bằng hàm setImage()

slider.addListener(SWT.Selection, event -> onSelection(slider));

Lắng nghe sự kiện kéo con trượt trên slider. Hàm onSelection() được gọi khi user kéo con trượt trên slider.

int value = slider.getSelection();

Hàm trả về giá trị trên slider

if (value == 0) {
    label.setImage(mute);
    label.pack();
} else if (value > 0 && value <= 30) { 
    label.setImage(min); 
} else if (value > 30 && value < 80) {
    label.setImage(med);
} else {
    label.setImage(max);
}

Giá trị trả về được chia 4 trường hợp:

value = 0: hiển thị ảnh mute.png

0 < value <= 30: hiển thị ảnh min.png

30 < value < 80: hiển thị ảnh med.png

value >= 80: hiển thị ảnh max.png

@Override
public void finalize() {

    mute.dispose();
    med.dispose();
    min.dispose();
    max.dispose();
}

Khi clode slider, tất cả các resource cần được giải phóng.

Kết quả:

JavaSWT - Slider
JavaSWT – Slider

Be the first to comment

Leave a Reply