我正在编写一个分析器,直观地看到我的应用程序花费时间。我想要实现的接口(见下文)类似于带有
的树表我在R中创建了下图(见下文) - 遗憾的是,尽管图表生成是自动化的,但该方法不是交互式的。我想知道你是否可以建议一个更好的方法 - 也许是树桌。我查看了许多Swing,JavaFx树表示例。我还没有看到一个在树表中有行(时间线)的例子。
任何建议都将不胜感激。提前致谢。
答案 0 :(得分:1)
您可以使用javaFX中的TreeTableCell
属性在grahic
中显示任何节点。这包括Rectangle
s。
这是使用Rectangles
显示列中栏的简单示例:
// Arrays in TreeItems contain {startValue, endValue} (both positive)
TreeItem<int[]> root = new TreeItem<>(new int[]{0, 10});
root.getChildren().addAll(new TreeItem<>(new int[]{0, 5}), new TreeItem<>(new int[]{5, 10}));
TreeTableView<int[]> ttv = new TreeTableView<>(root);
// Column displaying bars based on data of TreeItem. Do not use this as
// the first column, otherwise the alignment be off depending on the
// distance to the root.
TreeTableColumn<int[], int[]> column = new TreeTableColumn<>();
column.setCellValueFactory(c -> c.getValue().valueProperty());
final double BAR_SIZE = 20;
column.setCellFactory((t) -> new TreeTableCell<int[], int[]>() {
// the bar
private final Rectangle rectangle = new Rectangle(0, 10);
{
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
// bar invisible by default
rectangle.setVisible(false);
setGraphic(rectangle);
}
@Override
protected void updateItem(int[] item, boolean empty) {
super.updateItem(item, empty);
if (!empty && item != null) {
// resize and display bar, it item is present
rectangle.setWidth((item[1] - item[0]) * BAR_SIZE);
rectangle.setTranslateX(item[0] * BAR_SIZE);
rectangle.setVisible(true);
} else {
// no item -> hide bar
rectangle.setVisible(false);
}
}
});
// add a columns new column
// add a additional empty column at the start to prevent bars being
// aligned based on distance to the root
ttv.getColumns().addAll(new TreeTableColumn<>(), column);
int[]
不同的数据类型;单元格值工厂和TreeTableCell
需要相应调整;可以找到更复杂模型的一个例子,例如在oracle教程中:https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/tree-table-view.htm Map
中,如果需要新的,则创建。