Java: Cách sử dụng Tool Bar

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

JToolBar là một bộ chứa dùng để nhóm một số thành phần - thường là nút lệnh với các biểu tượng - vào một hàng hoặc một cột. Thường thì tool bar cung cấp một cách truy cập dễ dàng tới chức năng gọi là menus.

Ảnh sau đây thể hiện một ứng dụng có tên ToolBarDemo trong đó có chứa một tool bar nằm trên text area.

ToolBarDemo, with the tool bar in an initial north position

Mặc định thì người dùng có thể kéo tool bar tới một vị trí khác của bộ chứa hoặc kéo ra khỏi cửa sổ của chính nó. Hình sau đây thể hiện kết quả khi kéo tool bar sang bên phải của bộ chứa.

ToolBarDemo, after the tool bar is dragged to the east

Để việc kéo được thực hiện chuẩn thì tool bar phải nằm trong bộ chứa sử dụng trình quản lý bố cục BorderLayout. Tool bar không được là thành phần nằm ở tâm của bộ chứa.

Hình sau đây cho thấy kết quả khi kéo tool bar ra ngoài cửa sổ của chính nó.

ToolBarDemo, after the tool bar is dragged out into its own window

Đoạn mã sau đây trích từ ví dụ ToolBarDemo sẽ tạo một tool bar và thêm vào bộ chứa.

public class ToolBarDemo extends JPanel implements ActionListener {
    ...
    public ToolBarDemo() {
        super(new BorderLayout());
        ...
        JToolBar toolBar = new JToolBar("Still draggable");
        addButtons(toolBar);
        ...
        setPreferredSize(new Dimension(450, 130));
        add(toolBar, BorderLayout.PAGE_START);
        add(scrollPane, BorderLayout.CENTER);
    }
    ...
}

Đoạn mã trên sẽ đặt vị trí của tool bar là ở trên thanh cuộn bằng cách đặt tất cả các thành phần trong một khối được điều khiển bởi border layout, với tool bar nằm ở vị trí PAGE_START và thanh cuộn nằm ở vị trí CENTER. Vì thanh cuộn nằm ở trung tâm và không có thành phần nào khác ngoại trừ nó trong container, nên mặc định thì tool bar được kéo đến các vị trí khác nhau của container. Tool bar cũng có thể được kéo vào cửa sổ của chính nó, trong trường hợp này cửa sổ có tiêu đề "Still draggable" được chỉ định bởi hàm tạo của của JToolBar.

Tạo các nút lệnh cho Tool Bar

Các nút lệnh trong tool bar là các thể hiện của lớp JButton sử dụng các ảnh của Java Look and Feel Graphics Repository.

Dưới đây là đoạn mã dùng để tạo các nút và thêm chúng vào tool bar.

protected void addButtons(JToolBar toolBar) {
    JButton button = null;

    //nút thứ nhất
    button = makeNavigationButton("Back24", PREVIOUS, "Back to previous something-or-other", "Previous");
    toolBar.add(button);

    //nút thứ hai
    button = makeNavigationButton("Up24", UP, "Up to something-or-other", "Up");
    toolBar.add(button);

    ...//tạo nút thứ ba ở đây...
}

protected JButton makeNavigationButton(String imageName, String actionCommand, String toolTipText, String altText) {
    //tìm ảnh.
    String imgLocation = "public/images/article/" + imageName + ".gif";
    URL imageURL = ToolBarDemo.class.getResource(imgLocation);

    //tạo và khởi tạo nút lệnh.
    JButton button = new JButton();
    button.setActionCommand(actionCommand);
    button.setToolTipText(toolTipText);
    button.addActionListener(this);

    if (imageURL != null) {                      //nếu tìm thấy ảnh
        button.setIcon(new ImageIcon(imageURL, altText));
    } else {                                     //nếu không tìm thấy ảnh thì
        button.setText(altText);
        System.err.println("Resource not found: " + imgLocation);
    }

    return button;
}

Ở đoạn mã trên, trước tên là lời gọi đến phương thức makeNavigationButton để tạo ảnh cho nút đầu tiên, ảnh này có kích thước 24x24 và có text là "Back".

Cùng với việc tìm ảnh cho nút lệnh thì makeNavigationButton còn tạo nút lệnh, thiết lập các chuỗi cho câu lệnh hành động của nó và cho cả tool tip text, ngoài ra nó còn thêm action listener cho nút lệnh. Nếu không tìm thấy ảnh thì phương thức sẽ in ra một thông báo lỗi và đưa text vào nút lệnh để đảm bảo nút lệnh vẫn sử dụng được.

Tùy chỉnh Tool Bar

Bằng việc thêm một số dòng lệnh vào ví dụ ở trên ta có thể có được thêm một số đặc tính của tool bar như sau:

  • Dùng phương thức setFloatable(false) để  tạo một tool bar tĩnh.
  • Dùng phương thức setRollover(true) để trực quan hóa tool bar button khi người dùng dùng chuột chạm vào chúng.
  • Thêm một bộ phân cách (separator) cho a tool bar.
  • Một thành phần không phải là nút lệnh cho tool bar.

Toàn bộ đoạn mã bạn có thê xem tại ví dụ ToolBarDemo2. Dưới đây là hình ảnh thể hiện cho ví dụ này.

ToolBarDemo2 shows a tool bar with a variety of components

Ở hình trên bạn thấy tool bar không có biểu tượng cho phép kéo ở phía bên trái của nó, tức là ta không kéo nó được. Câu lệnh sau đây dùng để tắt chức năng kéo này:

toolBar.setFloatable(false);

Ví dụ này cũng thiết lập tool bar ở chế độ rollover, vì thế khi chạm chuột nào nút lệnh thì sẽ xuất hiện một chỉ báo trực quan như hình trên ("Something else"). Kiểu của chỉ báo trực quan này phụ thuộc vào look and feel, ví dụ như look and feel Metal sử dụng hiệu ứng gradient để tạo chỉ báo cho nút lệnh nắm phía dưới con trỏ chuột trong khi các loại look and feel thì sử dụng border cho điều này. Dưới đây là câu lệnh dùng để thiết lập chế độ rollover:

toolBar.setRollover(true);

Một điểm nữa mà ta thấy ở hình trên là tool bar có chứa hai thành phần mới và được phân cách nhau bằng một khoảng không gian trống gọi là separator (phần phân cách). Câu lệnh dưới đây dùng để thêm separator:

toolBar.addSeparator();

Còn dưới đây là đoạn mã thêm các thành phần mới:

//nút lệnh thứ tư
button = new JButton("Another button");
...
toolBar.add(button);

//thành phần thứ năm không phải là nút lệnh!
JTextField textField = new JTextField("A text field");
...
toolBar.add(textField);

Ta có thể dễ dàng tạo các tool bar nằm ở bên trên hoặc bên dưới thay vì nằm ở chính giữa bằng cách gọi phương thức setAlignmentY. Ví dụ, để đặt ở vị trí top tất cả các thành phần của tool bar thì ta gọi phương thức setAlignmentY(TOP_ALIGNMENT) cho mỗi thành phần. Tương tự như vậy, ta có thể dùng phương thức setAlignmentX chỉ định việc canh dọc các thành phần nếu tool bar đang ở trạng thái được canh dọc (vertical). Ta làm được điều này là bởi vì tool bar sử dụng BoxLayout để định vị các thành phần của nó.

API Tool Bar

Bảng dưới đây liệt kê phương hàm tạo và phương thức phổ biến của lớp JToolBar, những phương thức khác ta có thể gọi và sử dụng từ lớp JComponent.

Phương thức/Hàm tạo Mục đích
JToolBar()
JToolBar(int)
JToolBar(String)
JToolBar(String, int)
Tạo tool bar. Tham số tùy chọn kiểu int dùng để chỉ định hướng cho tool bar, mặc định là HORIZONTAL. Tham số tùy chọn String dùng để chỉ định tiêu đề cho cửa sổ củ tool bar nếu nó được kéo ra ngoài container của nó.
Component add(Component) Thêm một thành phần vào tool bar.

Ta có thể kết hợp nút lệnh với một Action bằng cách sử dụng phương thức setAction(Action) được định nghĩa bởi lớp AbstractButton.

void addSeparator() Thêm separator vào cuối tool bar.
void setFloatable(boolean)
boolean isFloatable()
Mặc định là true, phương thức này dùng để cho phép hay không cho phép kéo tool bar ra khỏi window của nó. Để không cho phép kéo ta sử dụng toolBar.setFloatable(false). Một số loại look and feel có thể không cho phép dùng.
void setRollover(boolean)
boolean isRollover()
Phương thức dùng để điều khiển rollover, mặc định là false. Để tạo tool bar button trực quan khi người dùng chạm chuột vào thì ta thiết lập là true. Một số look and feel có thể không cho phép dùng.

Ví dụ có sử dụng Tool Bar

» Tiếp: Cách sử dụng Tool Tip
« Trước: Cách sử dụng Text Field (JTextField)
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!