14 ããªãŒã»ãã¥ãŒ
ãã®ç« ã§ã¯ãJavaFXã¢ããªã±ãŒã·ã§ã³ã«ããªãŒæ§é ããã«ãããããªãŒã»ãã¥ãŒã«é ç®ã远å ããã€ãã³ããåŠçããã»ã«ã»ãã¡ã¯ããªãé©çšããŠããªãŒã®ã»ã«ãã«ã¹ã¿ãã€ãºããæ¹æ³ã«ã€ããŠåŠç¿ããŸãã
javafx.scene.controlããã±ãŒãžã®TreeViewã¯ã©ã¹ã¯ãéå±€æ§é ã®ãã¥ãŒãæäŸããŸãã ããããã®ããªãŒã§ãéå±€ã®æäžäœã«ãããªããžã§ã¯ãã¯ãã«ãŒãããšåŒã°ããŸãã ã«ãŒãã«ã¯è€æ°ã®åé
ç®ãå«ãŸãããŸããã®é
ç®ã«ãåãå«ãŸããŸãã åã®ãªãé
ç®ã¯ããªãŒãããšåŒã°ããŸãã
å³14-1ã«ãããªãŒã»ãã¥ãŒã®ã¢ããªã±ãŒã·ã§ã³ã®ç»é¢ãã£ããã£ã瀺ããŸãã
å³14-1 ããªãŒã»ãã¥ãŒã®ãµã³ãã«

ãå³14-1 ããªãŒã»ãã¥ãŒã®ãµã³ãã«ãã®èª¬æ
ããªãŒã»ãã¥ãŒã®äœæ
JavaFXã¢ããªã±ãŒã·ã§ã³å
ã«ããªãŒæ§é ããã«ãããå Žåãéåžžã¯TreeViewã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããè€æ°ã®TreeItemãªããžã§ã¯ããå®çŸ©ããããªãŒé
ç®ã®ãããããã«ãŒãã«ããŠãã®ã«ãŒããããªãŒã»ãã¥ãŒã«è¿œå ãããã®ä»ã®ããªãŒé
ç®ãã«ãŒãã«è¿œå ããå¿
èŠããããŸãã
ããããã®ããªãŒé
ç®ã«ã¯ãTreeItemã¯ã©ã¹ã®å¯Ÿå¿ããã³ã³ã¹ãã©ã¯ã¿ã䜿çšããããsetGraphicã¡ãœãããã³ãŒã«ããããšã«ãããã°ã©ãã£ãã¯ã»ã¢ã€ã³ã³ãä»å ã§ããŸãã ã¢ã€ã³ã³ã®æšå¥šãµã€ãºã¯16x16ã§ãããå®éã«ã¯ãNodeãªããžã§ã¯ããã¢ã€ã³ã³ãšããŠèšå®ã§ããå®å
šã«ã€ã³ã¿ã©ã¯ãã£ãã«ã§ããŸãã
äŸ14-1ã¯ãã«ãŒããš5ã€ã®ãªãŒãã®ããåçŽãªããªãŒã»ãã¥ãŒã®å®è£ ã瀺ããŠããŸãã
äŸ14-1 ããªãŒã»ãã¥ãŒã®äœæ
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TreeViewSample extends Application {
private final Node rootIcon = new ImageView(
new Image(getClass().getResourceAsStream("folder_16.png"))
);
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Tree View Sample");
TreeItem<String> rootItem = new TreeItem<> ("Inbox", rootIcon);
rootItem.setExpanded(true);
for (int i = 1; i < 6; i++) {
TreeItem<String> item = new TreeItem<> ("Message" + i);
rootItem.getChildren().add(item);
}
TreeView<String> tree = new TreeView<> (rootItem);
StackPane root = new StackPane();
root.getChildren().add(tree);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
forã«ãŒãå
ã«äœæããããªãŒé
ç®ã¯ãã¹ãŠãgetChildrenã¡ãœãããšaddã¡ãœãããã³ãŒã«ããããšã§ã«ãŒãé
ç®ã«è¿œå ãããŸãã ãŸããaddã¡ãœããã§ã¯ãªãaddAllã¡ãœããã䜿çšããŠãäºåã«äœæããããªãŒé
ç®ãäžæ¬ããŠçµã¿èŸŒãããšãã§ããŸãã
äŸ14-1ã«ç€ºãããã«ãæ°ãã«TreeViewãªããžã§ã¯ããäœæãããšãã«ãTreeViewã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿å
ã«ããªãŒã®ã«ãŒããæå®ãããããŸãã¯TreeViewã¯ã©ã¹ã®setRootã¡ãœãããã³ãŒã«ããŠèšå®ããããšãã§ããŸãã
ã«ãŒãé
ç®ã«ã³ãŒã«ãããsetExpandedã¡ãœããã¯ãããªãŒã»ãã¥ãŒé
ç®ã®åæã®å€èгãå®çŸ©ããŸãã ããã©ã«ãã§ã¯ããã¹ãŠã®TreeItemã€ã³ã¹ã¿ã³ã¹ã¯å§çž®ãããŠãããå¿
èŠã«å¿ããŠæåã§å±éããå¿
èŠããããŸãã trueå€ãsetExpandedã¡ãœããã«æž¡ããšãå³14-2ã«ç€ºãããã«ãã«ãŒãã»ããªãŒé
ç®ã¯ã¢ããªã±ãŒã·ã§ã³ã®éå§æã«å±éãããŠè¡šç€ºãããŸãã
å³14-2 5ã€ã®ããªãŒé ç®ã®ããããªãŒã»ãã¥ãŒ

ãå³14-2 5ã€ã®ããªãŒé ç®ã®ããããªãŒã»ãã¥ãŒãã®èª¬æ
äŸ14-1ã§ã¯ãStringé
ç®ã®ããåçŽãªããªãŒã»ãã¥ãŒãäœæããŸãã ãã ããããªãŒæ§é ã«ã¯ç°ãªãã¿ã€ãã®é
ç®ãå«ããããšãã§ããŸãã TreeItemã³ã³ã¹ãã©ã¯ã¿ã®äžè¬çãªè¡šèšæ³ãTreeItem<T> (T value)ã䜿çšããŠãããªãŒé
ç®ã§è¡šãããã¢ããªã±ãŒã·ã§ã³åºæã®ããŒã¿ãå®çŸ©ããŸãã Tã®å€ã¯UIã³ã³ãããŒã«ãã«ã¹ã¿ã ã»ã³ã³ããŒãã³ããªã©ã®ä»»æã®ãªããžã§ã¯ããæå®ã§ããŸãã
TreeViewã¯ã©ã¹ãšã¯ç°ãªããTreeItemã¯ã©ã¹ã¯Nodeã¯ã©ã¹ãæ¡åŒµãããã®ã§ã¯ãããŸããã ãã®ãããããªãŒé
ç®ãžã®èŠèŠå¹æã®é©çšããŸãã¯ã¡ãã¥ãŒã®è¿œå ã¯ã§ããŸããã ãã®åé¡ã解決ããã«ã¯ãã»ã«ã»ãã¡ã¯ããªã®ã¡ã«ããºã ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ã«ããããŠããªãŒé
ç®ã®ã«ã¹ã¿ã åäœãå®çŸ©ããŸãã
ã»ã«ã»ãã¡ã¯ããªã®å®è£
ã»ã«ã»ãã¡ã¯ããªã®ã¡ã«ããºã ã¯ãåäžã®TreeItemãTreeViewã«è¡šãTreeCellã€ã³ã¹ã¿ã³ã¹ã®çæã«äœ¿çšãããŸãã ã»ã«ã»ãã¡ã¯ããªã®äœ¿çšã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããŒã¿éãå€ãããªã³ããã³ãã§åçã«å€æŽãŸãã¯è¿œå ããå¿
èŠãããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
ç¹å®ã®äŒç€Ÿã®äººäºããŒã¿ãèŠèŠåãããŠãŒã¶ãŒãåŸæ¥å¡ã®è©³çްã倿Žããæ°èŠåŸæ¥å¡ã远å ã§ããã¢ããªã±ãŒã·ã§ã³ãæ³å®ããŸãã
äŸ14-2ã§ã¯ãEmployeeã¯ã©ã¹ãäœæããåŸæ¥å¡ããã®éšéã«å¿ããŠã°ã«ãŒãåããŠé
眮ããŸãã
äŸ14-2 人äºããªãŒã»ãã¥ãŒã®ã¢ãã«ã®äœæ
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.layout.VBox;
public class TreeViewSample extends Application {
private final Node rootIcon =
new ImageView(new Image(getClass().getResourceAsStream("root.png")));
private final Image depIcon =
new Image(getClass().getResourceAsStream("department.png"));
List<Employee> employees = Arrays.<Employee>asList(
new Employee("Jacob Smith", "Accounts Department"),
new Employee("Isabella Johnson", "Accounts Department"),
new Employee("Ethan Williams", "Sales Department"),
new Employee("Emma Jones", "Sales Department"),
new Employee("Michael Brown", "Sales Department"),
new Employee("Anna Black", "Sales Department"),
new Employee("Rodger York", "Sales Department"),
new Employee("Susan Collins", "Sales Department"),
new Employee("Mike Graham", "IT Support"),
new Employee("Judy Mayer", "IT Support"),
new Employee("Gregory Smith", "IT Support"));
TreeItem<String> rootNode;
public static void main(String[] args) {
launch(args);
}
public TreeViewSample() {
this.rootNode = new TreeItem<>("MyCompany Human Resources", rootIcon);
}
@Override
public void start(Stage stage) {
rootNode.setExpanded(true);
for (Employee employee : employees) {
TreeItem<String> empLeaf = new TreeItem<>(employee.getName());
boolean found = false;
for (TreeItem<String> depNode : rootNode.getChildren()) {
if (depNode.getValue().contentEquals(employee.getDepartment())){
depNode.getChildren().add(empLeaf);
found = true;
break;
}
}
if (!found) {
TreeItem<String> depNode = new TreeItem<>(
employee.getDepartment(),
new ImageView(depIcon)
);
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
}
stage.setTitle("Tree View Sample");
VBox box = new VBox();
final Scene scene = new Scene(box, 400, 300);
scene.setFill(Color.LIGHTGRAY);
TreeView<String> treeView = new TreeView<>(rootNode);
box.getChildren().add(treeView);
stage.setScene(scene);
stage.show();
}
public static class Employee {
private final SimpleStringProperty name;
private final SimpleStringProperty department;
private Employee(String name, String department) {
this.name = new SimpleStringProperty(name);
this.department = new SimpleStringProperty(department);
}
public String getName() {
return name.get();
}
public void setName(String fName) {
name.set(fName);
}
public String getDepartment() {
return department.get();
}
public void setDepartment(String fName) {
department.set(fName);
}
}
}
äŸ14-2ã«ç€ºãããããã®Employeeãªããžã§ã¯ãã«ã¯ãnameããã³departmentã®2ã€ã®ããããã£ããããŸãã åŸæ¥å¡ã«å¯Ÿå¿ããTreeItemãªããžã§ã¯ãã¯ããªãŒã®ãªãŒããšããŠèšè¿°ãããéšéã«å¯Ÿå¿ããããªãŒé
ç®ã¯åã®ããããªãŒé
ç®ãšããŠèšè¿°ãããŸãã äœæããæ°ããéšéåã¯ãgetDepartmentã¡ãœãããã³ãŒã«ããããšã«ãããEmployeeãªããžã§ã¯ãããååŸãããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ãããšãå³14-3ã«ç€ºããŠã£ã³ããŠã衚瀺ãããŸãã
å³14-3 ããªãŒã»ãã¥ãŒã®ãµã³ãã«ã»ã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºãããåŸæ¥å¡ãªã¹ã

ãå³14-3 ããªãŒã»ãã¥ãŒã®ãµã³ãã«ã»ã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºãããåŸæ¥å¡ãªã¹ããã®èª¬æ
äŸ14-2ã§ã¯ãããªãŒã»ãã¥ãŒãšãã®é ç®ã®ãã¬ãã¥ãŒã衚瀺ã§ããŸãããæ¢åã®é ç®ã®å€æŽãŸãã¯æ°èŠé ç®ã®è¿œå ã¯ã§ããŸããã äŸ14-3ã«ãã»ã«ã»ãã¡ã¯ããªãå®è£ ããã¢ããªã±ãŒã·ã§ã³ã®å€æŽããŒãžã§ã³ã瀺ããŸãã 倿ŽããŒãžã§ã³ã§ã¯ãåŸæ¥å¡ã®ååã倿Žã§ããŸãã
äŸ14-3 ã»ã«ã»ãã¡ã¯ããªã®å®è£
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.layout.VBox;
public class TreeViewSample extends Application {
private final Node rootIcon =
new ImageView(new Image(getClass().getResourceAsStream("root.png")));
private final Image depIcon =
new Image(getClass().getResourceAsStream("department.png"));
List<Employee> employees = Arrays.<Employee>asList(
new Employee("Jacob Smith", "Accounts Department"),
new Employee("Isabella Johnson", "Accounts Department"),
new Employee("Ethan Williams", "Sales Department"),
new Employee("Emma Jones", "Sales Department"),
new Employee("Michael Brown", "Sales Department"),
new Employee("Anna Black", "Sales Department"),
new Employee("Rodger York", "Sales Department"),
new Employee("Susan Collins", "Sales Department"),
new Employee("Mike Graham", "IT Support"),
new Employee("Judy Mayer", "IT Support"),
new Employee("Gregory Smith", "IT Support"));
TreeItem<String> rootNode;
public static void main(String[] args) {
Application.launch(args);
}
public TreeViewSample() {
this.rootNode = new TreeItem<>("MyCompany Human Resources", rootIcon);
}
@Override
public void start(Stage stage) {
rootNode.setExpanded(true);
for (Employee employee : employees) {
TreeItem<String> empLeaf = new TreeItem<>(employee.getName());
boolean found = false;
for (TreeItem<String> depNode : rootNode.getChildren()) {
if (depNode.getValue().contentEquals(employee.getDepartment())){
depNode.getChildren().add(empLeaf);
found = true;
break;
}
}
if (!found) {
TreeItem<String> depNode = new TreeItem<>(
employee.getDepartment(),
new ImageView(depIcon)
);
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
}
stage.setTitle("Tree View Sample");
VBox box = new VBox();
final Scene scene = new Scene(box, 400, 300);
scene.setFill(Color.LIGHTGRAY);
TreeView<String> treeView = new TreeView<>(rootNode);
treeView.setEditable(true);
treeView.setCellFactory((TreeView<String> p) ->
new TextFieldTreeCellImpl());
box.getChildren().add(treeView);
stage.setScene(scene);
stage.show();
}
private final class TextFieldTreeCellImpl extends TreeCell<String> {
private TextField textField;
public TextFieldTreeCellImpl() {
}
@Override
public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setText(null);
setGraphic(textField);
textField.selectAll();
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText((String) getItem());
setGraphic(getTreeItem().getGraphic());
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(getString());
}
setText(null);
setGraphic(textField);
} else {
setText(getString());
setGraphic(getTreeItem().getGraphic());
}
}
}
private void createTextField() {
textField = new TextField(getString());
textField.setOnKeyReleased((KeyEvent t) -> {
if (t.getCode() == KeyCode.ENTER) {
commitEdit(textField.getText());
} else if (t.getCode() == KeyCode.ESCAPE) {
cancelEdit();
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
public static class Employee {
private final SimpleStringProperty name;
private final SimpleStringProperty department;
private Employee(String name, String department) {
this.name = new SimpleStringProperty(name);
this.department = new SimpleStringProperty(department);
}
public String getName() {
return name.get();
}
public void setName(String fName) {
name.set(fName);
}
public String getDepartment() {
return department.get();
}
public void setDepartment(String fName) {
department.set(fName);
}
}
}
treeViewãªããžã§ã¯ãã«ã³ãŒã«ãããsetCellFactoryã¡ãœããããTreeCellå®è£
ããªãŒããŒã©ã€ãããTextFieldTreeCellImplã¯ã©ã¹ã§æå®ããããšããã«ããªãŒé
ç®ãåå®çŸ©ããŸãã
TextFieldTreeCellImplã¯ã©ã¹ã¯ããããã®ããªãŒé
ç®ã«TextFieldãªããžã§ã¯ããäœæããç·šéã€ãã³ããåŠçããã¡ãœãããæäŸããŸãã
ããªãŒã»ãã¥ãŒã§ã¯ãsetEditable(true)ã¡ãœãããæç€ºçã«ã³ãŒã«ãããã®ãã¹ãŠã®é
ç®ã®ç·šéãæå¹ã«ããå¿
èŠããããŸãã
äŸ14-3ã®ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããå®è¡ããŸãã æ¬¡ã«ãããªãŒã®åŸæ¥å¡ãã¯ãªãã¯ããŠããã®ååã®å€æŽã詊è¡ããŸãã å³14-4ã¯ãŠãŒã¶ãŒããIT Supportãéšéã®ããªãŒé ç®ãç·šéããç¬éã®ãã£ããã£ã瀺ããŸãã
ãªã³ããã³ãã§ã®æ°èŠããªãŒé ç®ã®è¿œå
äººäºæ åœè ãæ°èŠåŸæ¥å¡ã远å ã§ããããã«ãããªãŒã»ãã¥ãŒã®ãµã³ãã«ã»ã¢ããªã±ãŒã·ã§ã³ã倿ŽããŸãã åç §ã®ããã«äŸ14-4ã®å€ªåã®è¡ã䜿çšããŸãã ãããã®è¡ã¯ãéšéã«å¿ããŠã³ã³ããã¹ãã»ã¡ãã¥ãŒãããªãŒé ç®ã«è¿œå ããŸãã ãAdd Employeeãã¡ãã¥ãŒé ç®ãéžæããããšãæ°ããããªãŒé ç®ãçŸåšã®éšéã®ãªãŒããšããŠè¿œå ãããŸãã
éšéããªãŒé
ç®ãšåŸæ¥å¡ããªãŒé
ç®ãèå¥ããã«ã¯ãisLeafã¡ãœããã䜿çšããŸãã
äŸ14-4 æ°èŠããªãŒé ç®ã®è¿œå
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.beans.property.SimpleStringProperty;
import javafx.event.ActionEvent;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.VBox;
public class TreeViewSample extends Application {
private final Node rootIcon =
new ImageView(new Image(getClass().getResourceAsStream("root.png")));
private final Image depIcon =
new Image(getClass().getResourceAsStream("department.png"));
List<Employee> employees = Arrays.<Employee>asList(
new Employee("Jacob Smith", "Accounts Department"),
new Employee("Isabella Johnson", "Accounts Department"),
new Employee("Ethan Williams", "Sales Department"),
new Employee("Emma Jones", "Sales Department"),
new Employee("Michael Brown", "Sales Department"),
new Employee("Anna Black", "Sales Department"),
new Employee("Rodger York", "Sales Department"),
new Employee("Susan Collins", "Sales Department"),
new Employee("Mike Graham", "IT Support"),
new Employee("Judy Mayer", "IT Support"),
new Employee("Gregory Smith", "IT Support"));
TreeItem<String> rootNode =
new TreeItem<>("MyCompany Human Resources", rootIcon);
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) {
rootNode.setExpanded(true);
for (Employee employee : employees) {
TreeItem<String> empLeaf = new TreeItem<>(employee.getName());
boolean found = false;
for (TreeItem<String> depNode : rootNode.getChildren()) {
if (depNode.getValue().contentEquals(employee.getDepartment())){
depNode.getChildren().add(empLeaf);
found = true;
break;
}
}
if (!found) {
TreeItem depNode = new TreeItem(employee.getDepartment(),
new ImageView(depIcon)
);
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
}
stage.setTitle("Tree View Sample");
VBox box = new VBox();
final Scene scene = new Scene(box, 400, 300);
scene.setFill(Color.LIGHTGRAY);
TreeView<String> treeView = new TreeView<>(rootNode);
treeView.setEditable(true);
treeView.setCellFactory((TreeView<String> p) ->
new TextFieldTreeCellImpl());
box.getChildren().add(treeView);
stage.setScene(scene);
stage.show();
}
private final class TextFieldTreeCellImpl extends TreeCell<String> {
private TextField textField;
private final ContextMenu addMenu = new ContextMenu();
public TextFieldTreeCellImpl() {
MenuItem addMenuItem = new MenuItem("Add Employee");
addMenu.getItems().add(addMenuItem);
addMenuItem.setOnAction((ActionEvent t) -> {
TreeItem newEmployee =
new TreeItem<>("New Employee");
getTreeItem().getChildren().add(newEmployee);
});
}
@Override
public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setText(null);
setGraphic(textField);
textField.selectAll();
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText((String) getItem());
setGraphic(getTreeItem().getGraphic());
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(getString());
}
setText(null);
setGraphic(textField);
} else {
setText(getString());
setGraphic(getTreeItem().getGraphic());
if (
!getTreeItem().isLeaf()&&getTreeItem().getParent()!= null
){
setContextMenu(addMenu);
}
}
}
}
private void createTextField() {
textField = new TextField(getString());
textField.setOnKeyReleased((KeyEvent t) -> {
if (t.getCode() == KeyCode.ENTER) {
commitEdit(textField.getText());
} else if (t.getCode() == KeyCode.ESCAPE) {
cancelEdit();
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
public static class Employee {
private final SimpleStringProperty name;
private final SimpleStringProperty department;
private Employee(String name, String department) {
this.name = new SimpleStringProperty(name);
this.department = new SimpleStringProperty(department);
}
public String getName() {
return name.get();
}
public void setName(String fName) {
name.set(fName);
}
public String getDepartment() {
return department.get();
}
public void setDepartment(String fName) {
department.set(fName);
}
}
}
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããŸãã æ¬¡ã«ãããªãŒæ§é ã«ããéšéãéžæããå³ã¯ãªãã¯ããŸãã å³14-5ã«ç€ºãããã«ãã³ã³ããã¹ãã»ã¡ãã¥ãŒã衚瀺ãããŸãã
å³14-5 æ°èŠåŸæ¥å¡ã远å ããã³ã³ããã¹ãã»ã¡ãã¥ãŒ

ãå³14-5 æ°èŠåŸæ¥å¡ã远å ããã³ã³ããã¹ãã»ã¡ãã¥ãŒãã®èª¬æ
ã³ã³ããã¹ãã»ã¡ãã¥ãŒãããAdd Employeeãã¡ãã¥ãŒé ç®ãéžæãããšãçŸåšã®éšéã«æ°ããã¬ã³ãŒãã远å ãããŸãã å³14-6ã«ãæ°ãã«ãAccounts Departmentãã«è¿œå ãããããªãŒé ç®ã瀺ããŸãã
ããªãŒé ç®ã®ç·šéãæå¹åãããŠãããããããã©ã«ãã®ãNew Employeeãã®å€ã¯è©²åœããååã«å€æŽã§ããŸãã
ããªãŒã»ã»ã«ã»ãšãã£ã¿ã®äœ¿çš
APIã§æäŸãããŠããããªãŒã»ã»ã«ã»ãšãã£ã¿ãCheckBoxTreeCellãChoiceBoxTreeCellãComboBoxTreeCellãTextFieldTreeCellã䜿çšã§ããŸãã ãã®ã¯ã©ã¹ã¯TreeCellã®å®è£
ãæ¡åŒµããã»ã«å
ã«ç¹å®ã®ã³ã³ãããŒã«ã衚瀺ããŸãã
äŸ14-5ã§ã¯ããã§ãã¯ã»ããã¯ã¹ã®éå±€æ§é ããã«ãããCheckBoxTreeCellã¯ã©ã¹ã®UIã§ã®äœ¿çšäŸã瀺ããŸãã
äŸ14-5 CheckBoxTreeCellã¯ã©ã¹ã®äœ¿çš
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.CheckBoxTreeCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TreeViewSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Tree View Sample");
CheckBoxTreeItem<String> rootItem =
new CheckBoxTreeItem<>("View Source Files");
rootItem.setExpanded(true);
final TreeView tree = new TreeView(rootItem);
tree.setEditable(true);
tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());
for (int i = 0; i < 8; i++) {
final CheckBoxTreeItem<String> checkBoxTreeItem =
new CheckBoxTreeItem<>("Sample" + (i+1));
rootItem.getChildren().add(checkBoxTreeItem);
}
tree.setRoot(rootItem);
tree.setShowRoot(true);
StackPane root = new StackPane();
root.getChildren().add(tree);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
äŸ14-5ã§ã¯ãTreeItemã§ã¯ãªãCheckBoxTreeItemã¯ã©ã¹ã䜿çšããŠããªãŒã»ãã¥ãŒããã«ãããŸãã CheckBoxTreeItemã¯ã©ã¹ã¯ããªãŒæ§é ã§ã®éžææžãæªéžæãããã³äžç¢ºå®ã®ç¶æ
ããµããŒãããããèšèšãããŠããŸãã CheckBoxTreeItemã€ã³ã¹ã¿ã³ã¹ã¯éäŸåãšäŸåã®ã©ã¡ãã«ãã§ããŸãã CheckBoxTreeItemã€ã³ã¹ã¿ã³ã¹ãéäŸåã®å Žåããã®éžæç¶æ
ã«å¯Ÿãã倿Žã¯ã芪ããã³åCheckBoxTreeItemã€ã³ã¹ã¿ã³ã¹ã«ã¯åœ±é¿ããŸããã ããã©ã«ãã§ã¯ããã¹ãŠã®ChechBoxTreeItemã€ã³ã¹ã¿ã³ã¹ãäŸåã«ãªã£ãŠããŸãã
äŸ14-5ãã³ã³ãã€ã«ããŠå®è¡ãããView Source Filesãé ç®ãéžæããŸãã å³14-7ã®åºåã§ããã¹ãŠã®åé ç®ãéžæãããŠããããšã確èªããŸãã
CheckBoxTreeItemã€ã³ã¹ã¿ã³ã¹ãéäŸåã«ããã«ã¯ãsetIndependentã¡ãœãããrootItem.setIndependent(true);ã䜿çšããŸãã
TreeViewSampleã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšããã®åäœã¯å³14-8ã«ç€ºãããã«å€æŽãããŸãã
TreeTableViewã³ã³ãããŒã«ã¯ãããªãŒæ§é ã衚圢åŒã§è¡šç€ºããè¿œå æ©èœãæäŸããŸãã ãããã®ã³ã³ãããŒã«ã®è©³çްã¯ããããªãŒè¡šãã¥ãŒãã®ç« ãåç
§ããŠãã ããã
é¢é£ããã¥ã¡ã³ã





