Je travaille sur un TreeView
qui représente un programme de commande de robot, chaque TreeCell
représente une déclaration, et un TreeCell
peut être imbriqué dans un autre. Comme en programmation, les déclarations peuvent être imbriquées dans des if
o for
déclarations.
Ici, j'ai créé une démo simple, remplie de blocs aléatoires.
Capture d'écran de démonstration
Pour personnaliser le rendu de TreeCell
J'ai créé une classe étendant TreeCell
:
public class TreeDataCell extends TreeCell<TreeData> {
public void updateItem(TreeData item, boolean empty) {
super.updateItem(item, empty);
setText(null);
if (item == null || empty) {
setGraphic(null);
} else {
setGraphic(getCellGraphic(item));
}
}
private Group getCellGraphic(TreeData data) {
Group grp = new Group();
VBox vbox = new VBox();
vbox.setMinWidth(100);
vbox.setMaxWidth(200);
vbox.setBorder(new Border(new BorderStroke(
Color.LIGHTGRAY.darker(),
BorderStrokeStyle.SOLID,
new CornerRadii(10.0),
new BorderWidths(2.0))));
vbox.setBackground(new Background(new BackgroundFill(Color.LIGHTGRAY, new CornerRadii(10.0), null)));
vbox.setEffect(new DropShadow(2.0, 3.0, 3.0, Color.DIMGRAY));
Region header = new Region();
header.setPrefHeight(5.0);
Region footer = new Region();
footer.setPrefHeight(5.0);
Label labTitle = new Label();
labTitle.setFont(new Font("San Serif", 20));
labTitle.setText(data.getTitle());
Label labDesc = null;
if (data.getDescription() != null) {
labDesc = new Label();
labDesc.setWrapText(true);
labDesc.setText(data.getDescription());
}
vbox.getChildren().addAll(header, labTitle);
if (labDesc != null) {
vbox.getChildren().add(labDesc);
}
vbox.getChildren().add(footer);
grp.getChildren().add(vbox);
return grp;
}
}
En TreeData
est une classe simple contenant 2 String
s :
public class TreeData {
private String title;
private String desc;
/* getters + setters */
}
Comme vous pouvez le constater, l'indentation entre deux niveaux est trop faible, et nous pouvons à peine voir l'imbrication des instructions.
Je codifie tous les styles en Java, car je n'ai pas encore appris FXML+CSS.
J'aimerais savoir s'il est possible de définit la taille de l'indentation en Java ? Je ne trouve pas d'API à cet effet. En outre, Est-il possible de tracer des lignes entre le nœud parent et ses enfants ? comme JTree
en Swing
?
Nous vous remercions.