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

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

Việc tạo tool tip cho bất kỳ một đối tượng JComponent là một việc dễ dàng. Ta sử dụng phương thức setToolTipText dể thiết lập tool tip cho thành phần. Ví dụ, để thêm các tool tip cho ba nút b1, b2 và thì ta chỉ cần thêm ba dòng lệnh sau:

b1.setToolTipText("Click this button to disable the middle button.");

b2.setToolTipText("This middle button does not react when you click it.");

b3.setToolTipText("Click this button to enable the middle button.");

Khi người dùng chạm chuột vào một nút nào đó thì tool tip ứng với nút lệnh đó sẽ hiện ra. Điều này được minh họa thông qua ví dụ ButtonDemo được thể hiện ở bai viết Cách sử dụng Button, Check Box và Radio Button. Hình ảnh dưới đây thể hiện kết quả của việc cham chuột vào nút lệnh đối với ví dụ ButtonDemo.

ButtonDemo showing a tool tip.

Đối với các thành phần như tabbed pane trong đó có nhiều phần thì tool tip sẽ hiển thị ở phía dưới con trỏ chuột. Ví dụ như một tabbed pane có thể sử dụng tool tip để giải thích cho người dùng về điều gì sẽ xảy ra khi click chuột vào tab tương ứng. Khi thực thi một tabbed pane thì ta có thể định nghĩa tool tip trong đối số truyền tới phương thức addTab hoặc setToolTipTextAt.

Ngay cả những thành phần không có API để thiết lập tool tip thì ta cũng có thể thiết lập tool tip được. Nếu thành phần có hỗ trợ kết xuất (render) thì ta có thể thiết lập tool tip trên render tùy chỉnh. Các bài viết table và tree sẽ cung cấp cho ta các ví dụ về cách xác định tool tip bằng render tùy chỉnh. Bạn cũng có thể sử dụng cách tạo một lớp con của lớp JComponents và ghi đè phương thức getToolTipText(MouseEvent) để tạo tool tip.

API Tool Tip

Phần lớn các API ta cần để tạo tool tip thuộc về lớp JComponent, và do đó nó được thừa kế bởi hầu hết các thành phần Swing. Bạn cũng có thể tìm thấy các API tool tip ở trong các lớp khác như JTabbedPane. Nói chung những API này đủ để xác định và hiển thị tool tip, do đó thương thì ta không cần phải sử dụng đến các lớp JToolTipToolTipManager.

Bảng sau đây liệt kê API tool tip trong lớp JComponent.

Phương thức Mô tả
setToolTipText(String) Nếu chuỗi ở phần đối số không null thì phương thức này sẽ đăng ký tool tip cho thành phần tương ứng. Ngược lại thì phương thức này sẽ không hiển thị tool tip cho thàn phần tương ứng.
String getToolTipText() Trả về chuỗi tool tip mà đã được thiết lập thông qua phương thức setToolTipText().
String getToolTipText(MouseEvent) Mặc định thì trả về giá trị tương tự như phương thức getToolTipText(). Đối với những thành phần có nhiều phần nhỏ như JTabbedPaneJTableJTree thì việc ghi đè phương thức này sẽ trả về một chuỗi kết hợp với vị trí tương ứng của chuột xuất hiện tại thành phần đó. Ví dụ như mỗi một tab trong a tabbed pane có thể có một tool tip riêng.
Point getToolTipLocation(MouseEvent)

Trả về vị trí (trong hệ định vị của thành phần) là góc trên trái của tool tip của thành phần xuất hiện. Đối số của phương thức là sự kiện sẽ làm xuất hiện tool tip. Giá trị trả về mặc định là null, khi đó nó sẽ yêu cầu Swing chọn một vị trí.

Ví dụ về Tool Tip

Button Demo:

package components;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.ImageIcon;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

/* 
 * ButtonDemo.java yêu cầu những tập tin sau:
 *   public/images/article/right.gif
 *   public/images/article/middle.gif
 *   public/images/article/left.gif
 */
public class ButtonDemo extends JPanel
                        implements ActionListener {
    protected JButton b1, b2, b3;

    public ButtonDemo() {
        ImageIcon leftButtonIcon = createImageIcon("public/images/article/right.gif");
        ImageIcon middleButtonIcon = createImageIcon("public/images/article/middle.gif");
        ImageIcon rightButtonIcon = createImageIcon("public/images/article/left.gif");

        b1 = new JButton("Disable middle button", leftButtonIcon);
        b1.setVerticalTextPosition(AbstractButton.CENTER);
        b1.setHorizontalTextPosition(AbstractButton.LEADING); //aka LEFT, for left-to-right locales
        b1.setMnemonic(KeyEvent.VK_D);
        b1.setActionCommand("disable");

        b2 = new JButton("Middle button", middleButtonIcon);
        b2.setVerticalTextPosition(AbstractButton.BOTTOM);
        b2.setHorizontalTextPosition(AbstractButton.CENTER);
        b2.setMnemonic(KeyEvent.VK_M);

        b3 = new JButton("Enable middle button", rightButtonIcon);
        //Sử dụng vị trí text mặc định CENTER, TRAILING (RIGHT).
        b3.setMnemonic(KeyEvent.VK_E);
        b3.setActionCommand("enable");
        b3.setEnabled(false);

        //Lắng nghe hành động của các nút lệnh b1 và b3.
        b1.addActionListener(this);
        b3.addActionListener(this);

        b1.setToolTipText("Click this button to disable the middle button.");
        b2.setToolTipText("This middle button does nothing when you click it.");
        b3.setToolTipText("Click this button to enable the middle button.");

        //Thêm các thành phần tới bộ chứa, sử dụng FlowLayout mặc định.
        add(b1);
        add(b2);
        add(b3);
    }

    public void actionPerformed(ActionEvent e) {
        if ("disable".equals(e.getActionCommand())) {
            b2.setEnabled(false);
            b1.setEnabled(false);
            b3.setEnabled(true);
        } else {
            b2.setEnabled(true);
            b1.setEnabled(true);
            b3.setEnabled(false);
        }
    }

    /** Trả về một ImageIcon hoặc null nếu đường dẫn không hợp lệ. */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = ButtonDemo.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    /**
     * Tạo GUI và hiển thị nó. Để thread đảm bảo an toàn thì phương thức này 
     * nên được gọi từ thread event-dispatching.
     */
    private static void createAndShowGUI() {

        //Tạo và cài đặt cửa sổ.
        JFrame frame = new JFrame("ButtonDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Tạo và cài đặt content pane.
        ButtonDemo newContentPane = new ButtonDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Hiển thị cửa sổ.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Xếp lịch làm việc cho thread event-dispatching:
        //tạo và hiển thị GUI của ứng dụng.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI(); 
            }
        });
    }
}

Các ví dụ khác có sử dụng Tool Tip:

» Tiếp: Cách sử dụng Tree
« Trước: 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
Copied !!!