package com.digiarea.closure.model.controller.dialogs; import java.net.URL; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.TextArea; import javafx.stage.Stage; import javafx.util.Callback; /** * FXML Controller class * * @author daginno */ public class LocaleDialogController implements Initializable { @FXML private ListView<Locale> listView; @FXML private TextArea txtDescription; @FXML private Label labelTitle; @FXML private Label labelDesc; private Stage stage; /** * Selected placeholder. */ private Locale locale; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { listView.setCellFactory(new Callback<ListView<Locale>, ListCell<Locale>>() { @Override public ListCell<Locale> call(ListView<Locale> list) { return new LocaleDialogController.PlaceholderCell(); } }); listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Locale>() { @Override public void changed(ObservableValue<? extends Locale> arg0, Locale arg1, Locale arg2) { txtDescription.setText(arg2.getDisplayName()); } }); } @FXML private void handleOkButtonAction(ActionEvent event) { locale = listView.getSelectionModel().getSelectedItem(); stage.close(); } @FXML private void handleCancelButtonAction(ActionEvent event) { stage.close(); } public void setLabelDesc(String labelDesc) { this.labelDesc.setText(labelDesc); } public void setLabelTitle(String labelTitle) { this.labelTitle.setText(labelTitle); } public void setLocales(List<Locale> locales) { Comparator<Locale> comparator = new Comparator<Locale>() { public int compare(Locale c1, Locale c2) { return c1.toString().compareTo(c2.toString()); } }; Collections.sort(locales, comparator); ObservableList<Locale> items = FXCollections.observableArrayList(locales); listView.setItems(items); } public void setStage(Stage stage) { this.stage = stage; } public Locale getLocale() { return locale; } static class PlaceholderCell extends ListCell<Locale> { public void updateItem(Locale item, boolean empty) { super.updateItem(item, empty); if (empty) { setText(null); } if (item != null) { setText(item.toString()); } } } public ListView<Locale> getListView() { return listView; } public TextArea getTxtDescription() { return txtDescription; } public Label getLabelTitle() { return labelTitle; } public Label getLabelDesc() { return labelDesc; } }