2016-12-25 2 views
0

Ist es möglich, die Eigenschaften eines Knotens durch ein Label, eine ComboBox (oder mehrere Steuerelemente) in einem TreeView-Element darzustellen? Ich möchte den Namen des Knotens, ein ausgewähltes Element (und mehr Steuerelemente (z. B. Checkboxen), wenn möglich) in jeder Baumansicht Zelle anzeigen. Ist es möglich, dies zu tun?Wie können die Eigenschaften eines Objekts als Steuerelemente in einem einzelnen Zellenelement eines TreeView in JavaFx angezeigt werden?

Laut Oracle-Tutorial (http://docs.oracle.com/javafx/2/ui_controls/tree-view.htm) die CheckBoxTreeCell, ChoiceBoxTreeCell, ComboBoxTreeCell kann TextFieldTreeCell Klassen für Ähnliche Zwecke verwendet werden, aber ich kann nicht herausfinden, wie in einzelner Zelle viele von denen, verwenden, oder wie ein editierbar zu machen Vorlage für die Zellen.

Mein Modell ist ähnlich wie diese:

public enum Options { 
    Option1, Option2, ... OptionN; 
} 

// I want to use this Node class as a TreeItem 
public class Node { 

    private Node parentNode; 
    private List<Node> childNodes; 

    // Data to be displayed and edited by using only the tree 
    private String name;   // displayed as Label 
    private Options selectedOption; // displayed as ComboBox 
    // private boolean valid;  // displayed as Checkbox 
    // these properties possibly should be JavaFX's ObjectProperty, StringProperty, ListProperty etc. 

    // ... 
} 

Was ich dies wäre ähnlich zeigen wollen:

Node0 [ComboBox: (selectedOption = Options.OptionI)] 
|-- Node1 [ComboBox: (selectedOption = Options.OptionJ)] 
| |-- Node11 [ComboBox: (selectedOption = Options.OptionK)] 
|-- Node2 [ComboBox: (selectedOption = Options.OptionK)] 
    |-- Node21 [ComboBox: (selectedOption = Options.OptionL)] 
    |-- Node22 [ComboBox: (selectedOption = Options.OptionJ)] 

..., wo der Benutzer die Eigenschaften der Knoten festlegen können die bearbeite Baumelemente. Welchen Ansatz sollte ich verwenden, um diese Funktionalität zu erreichen?

Sorry, wenn das eine grundlegende Frage ist, habe ich gerade angefangen, JavaFx zu lernen.

+0

Dies kann hilfreich sein http://stackoverflow.com/documentation/javafx/2229/tableview/8814/customizing-tablecell-look- abhängig von Artikel – Omid

Antwort

0

Sie können die Verwendung von TreeTableView in Betracht ziehen. Wenn das Control nicht Ihren Bedürfnissen entsprechen, aber Sie eine benutzerdefinierte verwenden können TreeCell:

TreeView<Node> treeView = ... 
treeView.setCellFactory(t -> new TreeCell<Node>() { 

    private final ComboBox<Options> comboBox = new ComboBox<>(FXCollections.observableArrayList(Options.values())); 
    private final CheckBox valid = new CheckBox("valid"); 
    private final VBox container = new VBox(comboBox, valid); // todo: add more controls for other properties 

    private boolean swapping; 

    { 
     comboBox.valueProperty().addListener((observable, oldValue, newValue) -> { 
      if (!swapping) { 
       getItem().setSelectedOption(newValue); 
      } 
     }); 
     valid.selectedProperty().addListener((observable, oldValue, newValue) -> { 
      if (!swapping) { 
       getItem().setValid(newValue); 
      } 
     }); 

     // todo: listeners to other controls... 

     setContentDisplay(ContentDisplay.BOTTOM); 
    } 

    @Override 
    public void updateItem(Node item, boolean empty) { 
     super.updateItem(); 
     if (empty) { 
      setText(""); 
      setGraphic(null); 
     } else { 
      setText(item.getName()); 
      setGraphic(container); 
      swapping = true; 

      comboBox.setValue(item.getSelectedOption()); 
      valid.setSelected(item.isValid()); 
      // todo: initialize other nodes with item values 

      swapping = false; 
     } 
    } 
}); 
Verwandte Themen