Advertisement
zinch

JavaFX Editable ComboBox Demo

Mar 21st, 2014
1,747
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.69 KB | None | 0 0
  1. import javafx.application.Application;
  2. import javafx.beans.property.SimpleBooleanProperty;
  3. import javafx.beans.property.SimpleStringProperty;
  4. import javafx.beans.property.StringProperty;
  5. import javafx.collections.FXCollections;
  6. import javafx.collections.ObservableList;
  7. import javafx.scene.Scene;
  8. import javafx.scene.control.ComboBox;
  9. import javafx.scene.control.TableView;
  10. import javafx.stage.Stage;
  11. import javafx.util.StringConverter;
  12.  
  13. public class ComboBoxDemo extends Application{
  14.  
  15.     public class SimplePerson {
  16.         private StringProperty name;
  17.         private String somethingElse;
  18.  
  19.         public SimplePerson(String name) {
  20.             setName(name);
  21.         }
  22.  
  23.         public final void setName(String value) { nameProperty().set(value); }
  24.         public String getName() { return nameProperty().get(); }
  25.  
  26.         public StringProperty nameProperty() {
  27.             if (name == null) name = new SimpleStringProperty(this, "name");
  28.             return name;
  29.         }
  30.     }
  31.  
  32.     final ObservableList<SimplePerson> persons = FXCollections.observableArrayList(
  33.             new SimplePerson("Jacob"),
  34.             new SimplePerson("Isabella"),
  35.             new SimplePerson("Ethan"),
  36.             new SimplePerson("Emma"),
  37.             new SimplePerson("Michael")
  38.     );
  39.  
  40.     @Override
  41.     public void start(Stage stage) throws Exception {
  42.        
  43.  
  44.         final ComboBox<SimplePerson> cb = new ComboBox<>();
  45.         cb.setItems(persons);
  46.         cb.setEditable(true);
  47.         cb.setConverter(new StringConverter<SimplePerson>() {
  48.  
  49.             @Override
  50.             public String toString(SimplePerson p)
  51.             {
  52.                 if(p != null)
  53.                     return p.getName();
  54.                 return "";
  55.             }
  56.  
  57.             @Override
  58.             public SimplePerson fromString(String name)
  59.             {
  60.                 if(cb.getValue() != null)
  61.                 {
  62.                     ((SimplePerson)cb.getValue()).setName(name);
  63.                     cb.show();
  64.                     return (SimplePerson)cb.getValue();
  65.                 }
  66.                 return null;
  67.             }
  68.         });
  69.  
  70.         cb.getEditor().setOnAction(e -> {
  71.             SimplePerson person = cb.getSelectionModel().getSelectedItem();
  72.             if (null != person) {
  73.                 person.setName(cb.getEditor().getText());
  74.             } else {
  75.                 SimplePerson p = new SimplePerson(cb.getEditor().getText());
  76.                 cb.getItems().add(p);
  77.                 cb.getSelectionModel().select(p);
  78.             }
  79.         });
  80.  
  81.         stage.setScene(new Scene(cb));
  82.         stage.show();
  83.  
  84.     }
  85.  
  86.     public static void main(String[] args) { launch(args); }
  87.  
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement