Java: Cách sử dụng Tool Tip
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
.
Đố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 JComponent
s 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 JToolTip
và ToolTipManager
.
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ư JTabbedPane , JTable và JTree 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:
Giải phóng thời gian, khai phóng năng lực