从ProgressIndicator中删除标签,以便在开始之前实际调整大小'或者'完成后#39;

时间:2016-06-30 17:47:01

标签: java css javafx-2 javafx-8

我正在用一个小尺寸的ProgressIndicator尝试一些东西,但我现在卡住了。只要任务运行,ProgressIndicator就会获得INFINITY(-1)进度值。

因为我只想看到'纺车'并且在ProgressIndicator节点中没有任何文本,我试图"删除" CSS的文字:

.onlyProgressIndicator .percentage {
    -fx-fill: null;
}

然而,它不是删除文本,而是隐藏文本(或者它实际上可能会将其删除,但不会调整旋转轮的大小')。因此,在任务开始之前和任务完成之前,我会得到一个非常小的“轮子”。这是在任务开始之前它的外观示例:

tinytinytiny progressindicator wheel

正如你所看到的那样,太小了:)

在运行任务时,由于INFINITE(-1)值,实际上从ProgressIndicator中删除了文本,因此一切正常。任务完成后,我会遇到与开始之前相同的问题。结果的动态视图:

progressindicator process

任何想法如何在任务尚未启动或已完成时触发调整大小以使轮子与呼叫阶段一样大?

或者,另一种方法是,如果可以将进度指示器的文本绑定到任务的messageProperty()并将进度指示器的文本通过CSS移动到实际旋转轮的左侧,那么甚至更好。但是,我没有为ProgressIndicator找到textProperty()messageProperty()。 所以现在,我确实将Label节点的textProperty()(与HBox中的ProgressIndicator包装在一起)绑定到任务的messageProperty()

label.textProperty().bind(task.messageProperty());

任务的简化代码:

private static Task createJiraIssue(Throwable ex, Map<String, String> map) {
    int max = 1;
    return new Task() {
        @Override
        protected Object call() throws Exception {
            updateMessage("Set up connection to JIRA...");
            Thread.sleep(2500);
            updateMessage("Fetching issue data...");
            Thread.sleep(2500);
            updateMessage("Create new issue...");
            Thread.sleep(2500);

            updateMessage("Uploading log file...");

            updateProgress(max, max);

            return null;
        }

        @Override
        protected void succeeded() {
            super.succeeded();
            updateMessage("Bug report send.");
        }

        @Override
        protected void cancelled() {
            super.cancelled();
            updateMessage("Cancelled!");
        }

        @Override
        protected void failed() {
            super.failed();
            updateMessage("Sending bug report failed.");
        }
    };
}

private void runBackgroundTask(){
    Task task = createJiraIssue();

    label.textProperty().bind(task.messageProperty());
    progressIndicator.progressProperty().bind(task.progressProperty());

    new Thread(task).start();
}

提前致谢!

0 个答案:

没有答案