Ho un TabPane con schede chiudibili. Voglio attivare un "evento di chiusura" quando l'utente fa clic su un pulsante nel contenuto della scheda. Ecco il metodo chiamato quando l'utente fa clic sul pulsante:JavaFX - chiusura dinamica di una scheda in TabPane
public class CustomTab extends Tab {
...
protected void close() {
Event.fireEvent(this, new Event(Tab.CLOSED_EVENT));
}
....
}
aggiungo questa scheda personalizzata per tabpane come:
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);
Normalmente, le linguette possono essere chiuse cliccando il (default) vicino icone nell'intestazione della scheda e "Chiuso!" è stampato sullo schermo. Tuttavia, quando l'utente fa clic sul pulsante (ovvero nel contenuto della scheda) e chiama il metodo close()
di CustomTab
, di nuovo, "Chiuso!" viene stampato sullo schermo, ma questa volta la scheda non viene chiusa. Non è strano?
Come posso chiudere una scheda facendo clic su un pulsante arbitrario?
P.S .: tabPane.getTabs(). Remove (scheda) funziona, ma l'evento corrispondente è molto elegante. Dovrebbe anche chiudere la scheda.
quale versione di javafx stai usando? dal 8.0, c'è un "TAB_CLOSE_REQUEST_EVENT" – Sebastian
Poiché 8.0 non è ufficiale, e non contenuto nel jre predefinito, sto usando 2.2. – Ramazan
1: Come indica il nome dell'evento 'Tab.CLOSED_EVENT', l'evento dovrebbe essere attivato dopo che la scheda è stata chiusa. IMHO la [documentazione] (http://docs.oracle.com/javafx/2/api/javafx/scene/control/Tab.html#CLOSED_EVENT) è un po 'confusa. 2: Semplicemente invocando l'evento non si chiude la scheda. Il tuo approccio chiamando 'tabPane.getTabs(). Remove (tab)' è corretto. – pmoule