Tôi có một TabPane với các tab có thể đóng. Tôi muốn kích hoạt "sự kiện tab đóng" khi người dùng nhấp vào nút trong nội dung của tab. Dưới đây là phương pháp được gọi khi người dùng nhấp vào nút:JavaFX - đóng một Tab trong TabPane động
public class CustomTab extends Tab {
...
protected void close() {
Event.fireEvent(this, new Event(Tab.CLOSED_EVENT));
}
....
}
tôi thêm tab tùy chỉnh này để tabpane như:
TabPane tabPane = new TabPane();
...
CustomTab tab = new CustomTab();
tab.setOnClosed(new EventHandler<Event>() {
@Override
public void handle(Event t) {
System.out.println("Closed!");
}
});
tabPane.getTabs().add(tab);
tabPane.getSelectionModel().select(tab);
Thông thường, các tab có thể được đóng bằng cách nhấn vào (mặc định) biểu tượng gần trong tiêu đề của tab và "Đã đóng!" được in ra màn hình. Tuy nhiên, khi người dùng nhấp vào nút (có nghĩa là nội dung của tab) và gọi phương thức close()
của CustomTab
, một lần nữa, "Đã đóng!" được in lên màn hình, nhưng tab này không được đóng trong lần này. Nó có lạ không?
Làm cách nào để đóng tab khi nhấp vào nút tùy ý?
P.S .: tabPane.getTabs(). Xoá (tab) hoạt động, nhưng việc kích hoạt sự kiện tương ứng là rất thanh lịch. Nó cũng sẽ đóng tab.
bạn đang sử dụng phiên bản javafx nào? kể từ 8.0, có một "TAB_CLOSE_REQUEST_EVENT" – Sebastian
Vì 8.0 không chính thức và không chứa trong jre mặc định, tôi đang sử dụng 2.2. – Ramazan
1: Vì tên sự kiện 'Tab.CLOSED_EVENT' cho biết, sự kiện sẽ được kích hoạt sau khi tab bị đóng. IMHO [tài liệu] (http://docs.oracle.com/javafx/2/api/javafx/scene/control/Tab.html#CLOSED_EVENT) hơi mờ. 2: Đơn giản gọi sự kiện không đóng tab. Cách tiếp cận của bạn gọi là 'tabPane.getTabs(). Remove (tab)' là đúng. – pmoule