Java: Cách sử dụng Tabbed Pane

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

Với JTabbedPane ta có thể có một số thành phần như panels chẳng hạn, dùng để dùng chung không gian. Người dùng chọn thành phần để xem bằng cách chọn một tab ứng với một thành phần. Ta có thể sử dụng card layout để thay thế cho tabbed pane.

Tạo Tabbed Pane

Để tạo tabbed pane thì ta tạo một thể hiện của JTabbedPane, sau đó tạo các thành phần muốn hiển thị rồi đưa vào tabbed pane bằng cách sử dụng phương thức addTab.

Hình dưới đây minh họa ứng dụng có tên TabbedPaneDemo bao gồm một tabbed pane với bốn tab.

A screenshot of TabbedPaneDemo

Như hình bạn thấy, mỗi tab có một tool tip và một ký tự gợi nhớ, và mỗi tab để cho phép hiển thị cả ảnh và text.

Tab Placement

Tab placement mặc định dùng để thiết lập vị trí TOP như bạn thấy ở hình. Ta có thể thay tab placement thành LEFTRIGHTTOP hoặc BOTTOM bằng cách sử dụng phương thức setTabPlacement.

Mã lệnh dùng cho Tabbed Panes

Đoạn mã dưới đây trích từ ví dụ TabbedPaneDemo dùng để tạo tabbed pane như ảnh trên. Lưu ý rằng ở đây không cần phải xử lý sự kiện. Đối tượng JTabbedPane sẽ quan tâm đến các sự kiện liên quan đến chuột và bàn phím cho bạn.

JTabbedPane tabbedPane = new JTabbedPane();
ImageIcon icon = createImageIcon("public/images/article/middle.gif");

JComponent panel1 = makeTextPanel("Panel #1");
tabbedPane.addTab("Tab 1", icon, panel1, "Does nothing");
tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

JComponent panel2 = makeTextPanel("Panel #2");
tabbedPane.addTab("Tab 2", icon, panel2, "Does twice as much nothing");
tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

JComponent panel3 = makeTextPanel("Panel #3");
tabbedPane.addTab("Tab 3", icon, panel3, "Still does nothing");
tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

JComponent panel4 = makeTextPanel(
        "Panel #4 (has a preferred size of 410 x 50).");
panel4.setPreferredSize(new Dimension(410, 50));
tabbedPane.addTab("Tab 4", icon, panel4, "Does nothing at all");
tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

Theo đoạn mã trên, phương thức addTab sẽ có nhiệm vụ đưa tab vào tabbed pane. addTab có một số dạng, nhưng các dạng này đều sử dụng một chuỗi tiêu đề và thành phần được hiển thị bởi tab. Ta cũng có thể tùy chọn sử dụng icon và chuỗi tool tip. Văn bản hoặc icon hoặc cả hai đều có thể không có. Có một cách khác để tạo tab nữa là sử dụng phương thức insertTab, phương thức này sẽ giúp ta chỉ định chỉ mục của tab mà ta đang thêm vào. Cần lưu ý là phương thức addTab không cho phép chỉ định chỉ mục.

Chọn tab trong Tabbed Pane

Dưới đây là ba cách ta có thể chọn tab

  1. Dùng chuột.
  2. Dùng phím mũi tên của bàn phím. Khi đối tượng JTabbedPane được focus thì các phím mũi lên của bàn phím hoàn toàn có thể được dùng để chọn tab.
  3. Dùng phím gợi ý. Phương thức setMnemonicAt sẽ được dùng để tạo phím gợi ý và cho phép người dùng chọn tab. Ví dụ, setMnemonicAt(3, KeyEvent.VK_4) sẽ tạo phím gợi ý là '4' cho tab thứ tư (có chỉ số 3), khi đó ta chỉ việc nhấn Alt-4 là sẽ chọn được tab.

Thiết lập kích thước cho tab

Ta có thể thiết lập được độ rộng cũng như độ cao cho các tab của tabbed pane. Trong ví dụ TabbedPaneDemo thì panel thứ 4 có độ rộng và độ cao lớn hơn so với các panel khác, như vậy thì kích thước của tabbed pane sẽ tương ứng với kích thước của panel thứ 4 này.

Tab với các thành phần tùy chỉnh

Ví dụ TabComponentsDemo giới thiệu tabbed pane trong đó các tab chứa các thành phần khác. Việc sử dụng thành phần tùy chỉnh sẽ cho phép ta đưa thêm vào tab những thành phần như nút lệnh, combo box, label, ... và cho phép những tương tác phức tạp hơn với người dùng.

Hình dưới đây cho thấy việc đưa nút close vào tab nhằm mục đích đóng tab hiện thời.

A screenshot of TabComponentsDemo

Xóa Tab

Đoạn mã sau đây trích từ ví dụ ButtonTabComponent dùng để xóa tab khỏi tabbed pane. Lưu ý rằng ở đây ta cần sử dụng đến việc xử lý sự kiện. Ở đây, vì mỗi tab đều chứa một nút lệnh (JButton) nên ta sẽ sử dụng ActionListener để đóng nút lệnh, theo đó khi ta thực hiện phương thức actionPerformed (người dùng nhấn nút lệnh) thì ta sẽ xác định chỉ mục ứng với tab muốn xóa.

public void actionPerformed(ActionEvent e) {
    int i = pane.indexOfTabComponent(ButtonTabComponent.this);
    if (i != -1) {
    pane.remove(i);
    }
}

Thiết lập tiêu đề cho tab tùy chỉnh

Đoạn mã sau trích từ ví dụ ButtonTabComponent dùng để lấy tiếu đề của tab từ tabbed pane.

JLabel label = new JLabel(title) {
    public String getText() {
        int i = pane.indexOfTabComponent(ButtonTabComponent.this);
        if (i != -1) {
            return pane.getTitleAt(i);
        }
        return null;
    }
};

API Tabbed Pane

Tạo và thiết lập Tabbed Pane
Phương thức/Hàm tạo Mục đích
JTabbedPane()
JTabbedPane(int)
JTabbedPane(int, int)
Tạo một tabbed pane. Đối số tùy chọn đầu tiên dùng để chỉ định vị trí cho các tab. Mặc định thì các tab sẽ xuất hiện ở vị trí top của tabbed pane. Ta có thể chỉ định các vị trí: TOPBOTTOMLEFTRIGHT. Đối số thứ hai dùng để chỉ định bố cục cho tab gồm WRAP_TAB_LAYOUT  và SCROLL_TAB_LAYOUT.
addTab(String, Icon, Component, String)
addTab(String, Icon, Component)
addTab(String, Component)
Thêm một tab mới vào tabbed pane. Đối số thứ nhất chỉ định văn bản cho tab. Đối số tùy chịn icon dùng để chỉ định icon cho tab, đối số component chỉ định thành phần mà tabbed pane sẽ hiển thị khi tab được chọn. Đối số thứ tư chỉ định tool tip cho tab.
void setTabLayoutPolicy(int)
int getTabLayoutPolicy()
Sets or gets the policy that the tabbed pane uses in laying out tabs when all tabs do not fit within a single run. Possible values areWRAP_TAB_LAYOUT and SCROLL_TAB_LAYOUT. The default policy is WRAP_TAB_LAYOUT.
void setTabPlacement(int)
int getTabPlacement()
Sets or gets the location where the tabs appear relative to the content. Possible values (defined in SwingConstants, which is implemented byJTabbedPane) are TOPBOTTOMLEFT, and RIGHT.

 

Chèn, xóa, tìm và chọn Tab
Phương thức Mục đích
insertTab(String, Icon, Component, String, int) Chèn một tab vào tabbed pane tại vị trí chỉ số chỉ định, tab đầu tiên có chỉ số 0. Các đối số tương tự như phương thức addTab.
remove(Component)
removeTabAt(int)
Xóa tab khỏi tabbed pane.
removeAll() Xóa tất cả tab.
int indexOfComponent(Component)
int indexOfTab(String)
int indexOfTab(Icon)
Trả về chỉ số của tab ứng với thành phần, tiêu đề, hoặc icon chỉ định.
void setSelectedIndex(int)
void setSelectedComponent(Component)
Chọn tab có thành phần hay chỉ mục được chỉ định.
int getSelectedIndex()
Component getSelectedComponent()
Trả về chỉ mục hoặc thành phần của tab đã chọn.

 

Thay đổi sự xuất hiện của Tab
Phương thức Mục đích
void setComponentAt(int, Component)
Component getComponentAt(int)
Thiết lập hoặc lấy thành phần liên quan đến tab ứng với chỉ mục được chỉ định.
void setTitleAt(int, String)
String getTitleAt(int)
Thiết lập hoặc lấy tiêu đề của tab ứng với chỉ mục được chỉ định.
void setIconAt(int, Icon)
Icon getIconAt(int)
void setDisabledIconAt(int, Icon)
Icon getDisabledIconAt(int)
Thiết lập hoặc lấy icon của tab ứng với chỉ mục được chỉ định.
void setBackgroundAt(int, Color)
Color getBackgroundAt(int)
void setForegroundAt(int, Color)
Color getForegroundAt(int)
Thiết lập hoặc lấy màu nền hoặc màu chữ của tab được chỉ định theo chỉ số. Mặc định thì tab sử dụng màu nền và màu chữ của tabbed pane. Ví dụ, nếu màu nền của tabbed pane là màu đen thì mỗi tiêu đề của tab sẽ có màu đen ngoại trừ những tab mà bạn sử dụng màu khác bằng phương thức setForegroundAt.
void setEnabledAt(int, boolean)
boolean isEnabledAt(int)
Thiết lập hoặc lấy trạng thái của tab ứng với chỉ số được chỉ ra.
void setMnemonicAt(int, int)
int getMnemonicAt(int)
Thiết lập hoặc lấy ký tự gợi nhớ của tab.
void setDisplayedMnemonicIndexAt(int, int)
int getDisplayedMnemonicIndexAt(int)
Thiết lập hoặc lấy ký tự được chỉ định làm ký tự gợi nhớ. Điều này hữu dụng khi ký tự gợi nhớ xuất hiện nhiều lần trong tiêu đề của tab.
void setToolTipTextAt(int, String)
String getToolTipTextAt(int)
Thiết lập hoặc lấy tool tip của tab.

 

Thiết lập các thành phần tùy chỉnh trên Tab
Phương thức Mục đích
void setTabComponentAt(int, Component) Thiết lập hoặc lấy thành phần ứng với tiêu đề hoặc icon (hoặc cả hai) của tab được chỉ định bởi đối số đầu tiên. Nếu đối số đầu tiên là null thì JTabbedPane sẽ lấy cả tiêu đề và icon.
Component getTabComponentAt(int) Lấy thành phần của tab ứng với chỉ số được chỉ định. Nếu không có tab nào tương ứng thì trả về null.
int indexOfTabComponent(Component) Kiểm tra xem thành phần được chỉ định có thuộc về một trong các tab của tabbed pane hay không. Trả về chỉ số của tab tương ứng hoặc -1 nếu không tìm thấy tab nào.

Ví dụ có sử dụng Tabbed Pane

» Tiếp: Cách sử dụng bảng (Table)
« Trước: Cách sử dụng Slider (JSlider)
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 !!!