如何在树表中绘制时间轴

时间:2016-01-15 21:21:26

标签: swing user-interface javafx

我正在编写一个分析器,直观地看到我的应用程序花费时间。我想要实现的接口(见下文)类似于带有

的树表
  • 用于表示响应时间的行或框。
  • 是一个可折叠的树,如图
  • 在表格列中显示指标的能力(例如,开始时间,费用等)
  • 能够在左侧和右侧显示标签或说明和指标

我在R中创建了下图(见下文) - 遗憾的是,尽管图表生成是自动化的,但该方法不是交互式的。我想知道你是否可以建议一个更好的方法 - 也许是树桌。我查看了许多Swing,JavaFx树表示例。我还没有看到一个在树表中有行(时间线)的例子。

enter image description here

任何建议都将不胜感激。提前致谢。

1 个答案:

答案 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);

您需要做的事