Java: Cách sử dụng Tool Bar
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.
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.
Để 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ó.
Đ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.
Ở 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 |
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
Giải phóng thời gian, khai phóng năng lực