Java: Cách sử dụng Slider (JSlider)


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Slider (JSlider - thanh trượt) cho phép người dùng dễ dàng chọn một số trong một dải giá trị được chỉ định nào đó. Nếu không có nhiều không gian cho phép thì ta nên sử dụng spinner thay thế.

Hình ảnh sau đây thể hiện một ứng dụng có sử dụng slider để điều khiển tốc độ hoạt họa:

A snapshot of SliderDemo, which uses a slider

Đoạn mã dưới đây trích từ ví dụ SliderDemo dùng để tạo slider như ảnh trên.

static final int FPS_MIN = 0;
static final int FPS_MAX = 30;
static final int FPS_INIT = 15;    //khởi tạo số frame mỗi giây
. . .
JSlider framesPerSecond = new JSlider(JSlider.HORIZONTAL, FPS_MIN, FPS_MAX, FPS_INIT);
framesPerSecond.addChangeListener(this);

//Turn on labels at major tick marks.
framesPerSecond.setMajorTickSpacing(10);
framesPerSecond.setMinorTickSpacing(1);
framesPerSecond.setPaintTicks(true);
framesPerSecond.setPaintLabels(true);

Mặc định thì major và minor của tick mark là không, nên để nhìn thấy các tick mark thì ta phải thiết lập tường minh ít nhất là một trong hai giá trị này thành khác 0 bằng phương thức setPaintTicks(true). Và bạn cũng cần đặt nhãn (label) cho các tick mark. Để hiển thị chuẩn các nhãn của major tick mark thì ta gọi phương thức setPaintLabels(true). Ví dụ trên thiết lập các nhãn theo cách thức này. Phần Tùy chỉnh nhãn cho Slider sẽ cung cấp cho bạn các cách tùy chỉnh cho các nhãn của slider. Slider cũng cho phép ta thiết lập font chữ for các thành phần của JSlider như sau:

Font font = new Font("Serif", Font.ITALIC, 15);
framesPerSecond.setFont(font);

Khi ta di chuyển con trượt của slider thì phương thức stateChanged của ChangeListener của slider được gọi. Phương thức này như sau:

public void stateChanged(ChangeEvent e) {
    JSlider source = (JSlider)e.getSource();
    if (!source.getValueIsAdjusting()) {
        int fps = (int)source.getValue();
        if (fps == 0) {
            if (!frozen) stopAnimation();
        } else {
            delay = 1000 / fps;
            timer.setDelay(delay);
            timer.setInitialDelay(delay * 10);
            if (frozen) startAnimation();
        }
    }
}

Lưu ý rằng phương thức stateChanged sẽ chỉ thay đổi tốc độ hoạt họa khi phương thức getValueIsAdjusting trả về giá trị false. Ngoài ra cũng có một số sự kiện nữa được kích hoạt khi ta di chuyển con trượt của slider.

Tùy chỉnh nhãn cho Slider

Hình ảnh dưới đây là phiên bản sửa đổi của ví dụ SliderDemo trong đó có sử dụng nhãn tùy chỉnh cho slider:

A snapshot of SliderDemo2, which uses a slider with custom labels

 

 

Đoạn mã dưới đây dùng để tạo slider và tùy chỉnh các nhãn cho nó:

//Tạo slider
JSlider framesPerSecond = new JSlider(JSlider.VERTICAL, FPS_MIN, FPS_MAX, FPS_INIT);
framesPerSecond.addChangeListener(this);
framesPerSecond.setMajorTickSpacing(10);
framesPerSecond.setPaintTicks(true);

//Tạo các nhãn đưa vào Hashtable
Hashtable labelTable = new Hashtable();
labelTable.put( new Integer( 0 ), new JLabel("Stop") );
labelTable.put( new Integer( FPS_MAX/10 ), new JLabel("Slow") );
labelTable.put( new Integer( FPS_MAX ), new JLabel("Fast") );
framesPerSecond.setLabelTable( labelTable );

framesPerSecond.setPaintLabels(true);

Mỗi cặp key-value trong bảng băm được xác định bằng phương thức setLabelTable, nó gồm vị trí và giá trị của nhãn. Key của hashtable phải là một số nguyên và giá trị phải nằm trong dải giá trị của slider, còn giá trị (value) của hashtable sẽ liên kết với mỗi key phải là một đối tượng kiểu Component. Ví dụ trên sử dụng các thể hiện của JLabel cho mỗi nhãn. Ta sử dụng các thể hiện của JLabel để thay đổi các icon hoặc nút lệnh mỗi khi con trượt của slider di chuyển tới vị trí của nhãn.

Ta dùng phương thức createStandardLabels của lớp JSlider để tạo một tập các nhãn số được định vị tại một thời điểm cụ thể. Ta cũng có thể thay đổi các giá trị trả về từ hashtable bằng cách sử dụng phương thức createStandardLabels.

API Slider

Tạo Slider
Hàm tạo Mục đích
JSlider() Tạo một slider ngang với dải giá trị mặc định là 0 đến 100 và giá trị khởi tạo là 50.
JSlider(int min, int max)
JSlider(int min, int max, int value)
Tạo một slider ngang trong đó có chỉ định các giá trị min và max. Đối số thứ 3 chỉ định giá trị khởi tạo cho slider.
JSlider(int orientation)
JSlider(int orientation, int min, int max, int value)
Tạo một slider với hướng được chỉ định là đối số orientation, có hai hướng tương ứng là JSlider.HORIZONTALJSlider.VERTICAL. Với hàm tạo có 4 đối số thứ 3 đối số sau lần lượt là các giá trị min, max và giá trị khởi tạo cho slider.
JSlider(BoundedRangeModel) Tạo một slider ngang với model được chỉ định, nó quản lý các giá trị min, max và giá trị hiện thời.

 

Tinh chỉnh sự xuất hiện của Slider
Phương thức Mục đích
void setValue(int)
int getValue()
Thiết lập hoặc lấy giá trị hiện thời của slider. Phương thức set của lấy vị trí của con trượt của slider.
void setOrientation(int)
int getOrientation()
Thiết lập hoặc lấy hướng của slider, các hương tương ứng gồm JSlider.HORIZONTAL và JSlider.VERTICAL.
void setInverted(boolean)
boolean getInverted()
Thiết lập hoặc lấy giá trị tối đa bên trái thanh trượt ngang hoặc bên dưới thanh trượt dọc, từ đó nghịch đảo dải giá trị của slider.
void setMinimum(int)
int getMinimum()
void setMaximum(int)
int getMaximum()
Thiết lập hoặc lấy các giá trị nhỏ nhất và lớn nhất của slider. Các phương thức này còn có tác dụng lấy dải giá trị của slider.
void setMajorTickSpacing(int)
int getMajorTickSpacing()
void setMinorTickSpacing(int)
int getMinorTickSpacing()
Thiết lập hoặc lấy dải giá trị major và minor tick. Ta cần gọi phương thức setPaintTicks(true) thì các tick mark mới xuất hiện.
void setPaintTicks(boolean)
boolean getPaintTicks()
Thiết lập hoặc lấy các tick marks xuất hiện trên slider.
void setPaintLabels(boolean)
boolean getPaintLabels()
Thiết lập hoặc lấy các nhãn của slider. Ta có thể cung cấp các nhãn tùy chỉnh bằng phương thức setLabelTable hoặc lấy các nhãn tự động bằng cách thiết lập không gian cho major tick thành giá trị khác 0.
void setLabelTable(Dictionary)
Dictionary getLabelTable()
Thiết lập hoặc lấy các nhãn cho slider. Ta phải gọi phương thức setPaintLabels(true) thì các nhãn mới xuất hiện.
Hashtable createStandardLabels(int)
Hashtable createStandardLabels(int, int)
Tạo một tập các nhãn số. Đối số đầu tiên kiểu int sẽ chỉ định bước tăng, đối số thứ hai chỉ định điểm bắt đầu.
setFont(java.awt.Font) Thiết lập font chữ cho nhãn của slider.

 

Chờ hoạt động của Slider
Phương thức Mục đích
void addChangeListener(ChangeListener) Đăng ký bộ lắng nghe sự thay đổi cho slider.
boolean getValueIsAdjusting() Xác định cử chỉ của người dùng để thực hiện việc di chuyển con trượt của slider.

 

Làm việc trực tiếp với Model dữ liệu
Lớp, Interface, hoặc Phương thức Mục đích
BoundedRangeModel Interface dùng cho model dữ liệu của slider.
DefaultBoundedRangeModel Một sự thực thi của giao diện BoundedRangeModel.
void setModel()
getModel()
(trong JSlider)
Thiết lập hoặc lấy model dữ liệu dùng trong slider. Ta cũng có thể thiết lập model bằng cách sử dụng hàm tạo để lấy một đối số có kiểu BoundedRangeModel.

Ví dụ có sử dụng Slider

Nguồn tham khảo: https://docs.oracle.com/javase/tutorial/uiswing/components/slider.html

» Tiếp: Cách sử dụng Tabbed Pane
« Trước: Cách sử dụng Password Field
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!