`

JavaFX学习之样例5

阅读更多
  该代码主要是timeline和进度条使用
import javafx.animation.*;
import javafx.application.Application;
import javafx.beans.property.*;
import javafx.beans.value.*;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;

public class LabeledProgressBarSample extends Application {
  public static void main(String[] args) { launch(args); }

  @Override public void start(final Stage stage) {
    stage.setScene(new Scene(createResettableProgressIndicatorBar()));
    stage.show();
  }

  private VBox createResettableProgressIndicatorBar() {
    final int    TOTAL_WORK = 18;
    final String WORK_DONE_LABEL_FORMAT = "%.0f";

    final ReadOnlyDoubleWrapper workDone  = new ReadOnlyDoubleWrapper();

    final ProgressIndicatorBar bar = new ProgressIndicatorBar(
        workDone.getReadOnlyProperty(),
        TOTAL_WORK,
        WORK_DONE_LABEL_FORMAT
    );

    final Timeline countDown = new Timeline(
        new KeyFrame(Duration.seconds(0), new KeyValue(workDone, TOTAL_WORK)),  //初始化workDone等于total,也就是进度条满的
        new KeyFrame(Duration.seconds(10), new KeyValue(workDone, 0))           //10秒内把workDone减到0。
    );
    countDown.play();

    final Button resetButton = new Button("Reset");
    resetButton.setOnAction(new EventHandler<ActionEvent>() {
      @Override
      public void handle(ActionEvent actionEvent) {
        countDown.playFromStart();  //重新开始
      }
    });

    final VBox layout = new VBox(20);
    layout.setAlignment(Pos.CENTER);
    layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 20px;");
    layout.getChildren().addAll(bar, resetButton);

    return layout;
  }
}

class ProgressIndicatorBar extends StackPane {
  final private ReadOnlyDoubleProperty workDone;
  final private double totalWork;

  final private ProgressBar bar  = new ProgressBar();
  final private Text        text = new Text();
  final private String      labelFormatSpecifier;

  final private static int DEFAULT_LABEL_PADDING = 5;

  ProgressIndicatorBar(final ReadOnlyDoubleProperty workDone, final double totalWork, final String labelFormatSpecifier) {
    this.workDone  = workDone;
    this.totalWork = totalWork;
    this.labelFormatSpecifier = labelFormatSpecifier;

    syncProgress();
    //监听workDone的变化,从而更新text和progress
    workDone.addListener(new ChangeListener<Number>() {
      @Override public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
        syncProgress();
      }
    });

    bar.setMaxWidth(Double.MAX_VALUE); // allows the progress bar to expand to fill available horizontal space.

    getChildren().setAll(bar, text);
  }

  // synchronizes the progress indicated with the work done.
  private void syncProgress() {
    if (workDone == null || totalWork == 0) {
      text.setText("");
      bar.setProgress(ProgressBar.INDETERMINATE_PROGRESS);
    } else {
      text.setText(String.format(labelFormatSpecifier, Math.ceil(workDone.get())));  //更新text
      bar.setProgress(workDone.get() / totalWork);  //更新进度条
    }

    bar.setMinHeight(text.getBoundsInLocal().getHeight() + DEFAULT_LABEL_PADDING * 2);
    bar.setMinWidth (text.getBoundsInLocal().getWidth()  + DEFAULT_LABEL_PADDING * 2);
  }
}

代码主要也就是timeline和progress二个的用法。fx最好的就是多了property,property里面多了方法。如上面的ReadOnlyDoubleWrapper,可以监控其值得变化。

String.format(labelFormatSpecifier, Math.ceil(workDone.get()));学习到了一个格式转化。
分享到:
评论

相关推荐

    JavaFX学习之样例8

    这个"JavaFX学习之样例8"可能是一个教程或示例集合,用于教授如何使用JavaFX来创建一个特定的图形元素,比如时钟。在这个例子中,我们可能将学习如何利用JavaFX的图形和动画功能来构建一个可交互的模拟时钟。 首先...

    javafx2introbyexample:javaFX中的样例代码

    5. **事件处理**:JavaFX提供了丰富的事件处理机制,包括事件监听器、事件处理方法和事件对象。通过这些,可以响应用户的点击、键盘输入等操作。 6. **CSS样式**:JavaFX支持CSS(层叠样式表)来定义UI的外观和布局...

    JavaFX2开发教程

    运行时还允许你体验官方提供的样例程序,这些样例展示了JavaFX的各种功能,源代码可供学习参考。 在NetBeans环境中配置JavaFX开发环境是另一个关键步骤。JavaFX2.0在Mac系统上的安装提供了更丰富的功能,如高性能...

    我的代码样例

    综上所述,这个压缩包“我的代码样例”提供了丰富的编程实践材料,覆盖了Java API的运用以及完整的图书管理系统开发,对于Java初学者和进阶者都有很大的学习价值。通过分析和学习这些代码,可以提升编程技巧,了解...

    javaFX2.0教程

    在学习JavaFX的过程中,不断尝试、运行样例和构建自己的项目对于掌握JavaFX是非常有帮助的。随着JavaFX 2.0的出现,开发者有了一个功能强大、跨平台的工具来创建高质量的桌面应用程序。通过本教程,你将能够学习到...

    GUI样例.7z

    总的来说,这个压缩包提供的GUI样例涵盖了基础界面设计、用户认证流程以及基本计算功能的实现,对于学习和掌握GUI编程,尤其是事件驱动编程和用户交互设计,具有很高的参考价值。通过分析和实践这些案例,开发者能够...

    jfreechart样例

    5. **与Swing和JavaFX的集成**:JFreeChart可以轻松地与Java Swing和JavaFX组件集成,方便在桌面应用程序中使用。 6. **良好的社区支持**:JFreeChart有活跃的开发社区,提供了丰富的文档、示例和问题解答,便于...

    java学习和项目中一些典型的应用场景样例代码.zip

    这个名为"java学习和项目中一些典型的应用场景样例代码.zip"的压缩包显然包含了一些Java编程的实际应用示例,旨在帮助学习者理解Java在实际项目中的运用。下面,我们将深入探讨Java的一些关键应用场景和相关知识点。...

    JAVA作业目录及样例

    本资源“JAVA作业目录及样例”是针对学习Java编程的学生们提供的一份宝贵的参考资料,它包含了Java程序设计实验和半期考试的相关内容,帮助学生理解和实践Java的核心概念。 Java程序设计实验部分通常涉及基本语法、...

    Java-Learning:java学习样例代码

    【Java学习样例代码】是针对Java编程语言的学习资源,主要包含了各种Java编程示例,旨在帮助初学者或有经验的开发者深入理解Java语言的核心概念和技术。这些代码样例涵盖了从基础语法到高级特性的广泛内容,对于学习...

    e(fx)lipse

    6. **样例代码**:提供JavaFX示例代码,帮助开发者了解和学习JavaFX API的用法。 7. **语法高亮**:对JavaFX剧本语言(FXML)提供语法高亮和错误检查。 在安装了**e(fx)lipse** 的Eclipse中,用户可以通过“File” ...

    demo.rar_DEMO

    5. **IO流**:Java的IO流系统允许读写文件、网络通信等,样例程序将展示如何使用FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类。 6. **多线程**:Java内置了对多线程的支持,样例程序可能...

    WebViewSample源码

    总结来说,`WebViewSample`源码是一个学习JavaFX如何集成Web内容的绝佳实例。通过对源码的深入理解和实践,开发者可以掌握如何在JavaFX应用程序中利用`WebView`组件展示丰富的Web内容,并实现与网页的交互。这不仅...

    基于智能家居,从客厅到卧室,从中控到sensor,开发者可以体验各种家居的开发样例,打造自己的家居体验,享受万物互联的快感。

    这里,我们主要关注的是基于Java的开发样例,如在"learn-java-master"这个项目中,开发者可以学习如何使用Java语言来实现智能家居系统的关键部分。 首先,让我们深入了解一下Java在智能家居中的应用。Java是一种...

    21天精通java源代码

    5. **输入/输出流**:理解I/O流的概念,学习如何进行文件读写,网络通信等操作。 6. **多线程**:Java提供了对多线程的支持,理解线程的创建、同步和通信,可以实现高效的并发处理。 7. **反射机制**:反射是Java...

    JAVA简单实例

    3. **封装**: 封装是面向对象编程的三大特性之一,它隐藏了对象的内部实现细节,只对外提供公共接口。通过访问修饰符(如public、private、protected),可以控制类成员的可见性。 4. **继承与多态**: 继承允许一个...

    desktop-project:样例项目Kelompok

    为了深入理解这个项目,你需要查看源代码,学习其中的类结构、方法实现以及如何通过JavaFX或Swing等库创建图形用户界面。同时,了解如何在Java中实现文件I/O操作,处理系统事件,以及可能涉及的网络通信(如果有的话...

    Jfreechart学习资源

    5. **使用样例代码**:`sample.css`可能包含样例的CSS样式,`index.html`和`.jsp`文件则可能提供了如何在Web环境中展示这些图表的示例代码。 在学习JFreeChart时,应重点理解如何构建和配置数据集,以及如何利用...

    java_docs.zip_45XG_QJ18_java_took5wy_zip

    Java Docs ZIP 文件 "java_docs.zip_45XG_QJ18_java_took5wy_zip" 包含了丰富的 Java 编程示例和样例代码,是学习和理解 Java 语言的重要资源。这个压缩包中的核心文件 "java_docs.pdf" 很可能是 Java 官方文档或一...

    Chris-Heavner-Portfolio-1:代码样例

    【Chris-Heavner-Portfolio-1:代码样例】是一个与Java编程相关的项目,它展示了开发者克里斯·海夫纳的编程技能和经验。在这个项目中,我们可以期待找到一系列使用Java语言编写的代码示例,可能包括不同领域的应用,...

Global site tag (gtag.js) - Google Analytics