`

JavaFX学习之样例2

阅读更多
  该代码主要是在linechart中移动到点时显示数据内容
import javafx.application.Application;
import javafx.collections.*;
import javafx.event.EventHandler;
import javafx.scene.*;
import javafx.scene.chart.*;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/** Displays a LineChart which displays the value of a plotted Node when you hover over the Node. */
public class LineChartWithHover extends Application {
  @SuppressWarnings("unchecked")
  @Override public void start(Stage stage) {
    final LineChart lineChart = new LineChart(
        new NumberAxis(), new NumberAxis(),
        FXCollections.observableArrayList(
            new XYChart.Series(
                "My portfolio",
                FXCollections.observableArrayList(
                    plot(23, 14, 15, 24, 34, 36, 22, 45, 43, 17, 29, 25)
                )
            )
        )
    );
    lineChart.setCursor(Cursor.CROSSHAIR);

    lineChart.setTitle("Stock Monitoring, 2013");

    stage.setScene(new Scene(lineChart, 500, 400));
    stage.show();
  }

  /** @return plotted y values for monotonically increasing integer x values, starting from x=1 */
  public ObservableList<XYChart.Data<Integer, Integer>> plot(int... y) {
    final ObservableList<XYChart.Data<Integer, Integer>> dataset = FXCollections.observableArrayList();
    int i = 0;
    while (i < y.length) {
      final XYChart.Data<Integer, Integer> data = new XYChart.Data(i + 1, y[i]);
      data.setNode(  //该类的功能主要是在data中设置node,由该node即展现出效果
          new HoveredThresholdNode(
              (i == 0) ? 0 : y[i-1],
              y[i]
          )
      );

      dataset.add(data);
      i++;
    }

    return dataset;
  }

  /** a node which displays a value on hover, but is otherwise empty */
  class HoveredThresholdNode extends StackPane {
    HoveredThresholdNode(int priorValue, int value) {
      setPrefSize(15, 15);

      final Label label = createDataThresholdLabel(priorValue, value);

      setOnMouseEntered(new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent mouseEvent) {
          getChildren().setAll(label);
          setCursor(Cursor.NONE);  //设置鼠标箭头显示
          toFront();
        }
      });
      setOnMouseExited(new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent mouseEvent) {
          getChildren().clear();
          setCursor(Cursor.CROSSHAIR);
        }
      });
    }

    //创建label,并设置text。priorValue这个值主要用于前后比较,从而显示颜色不同。
    private Label createDataThresholdLabel(int priorValue, int value) {
      final Label label = new Label(value + "");
      label.getStyleClass().addAll("default-color0", "chart-line-symbol", "chart-series-line");
      label.setStyle("-fx-font-size: 20; -fx-font-weight: bold;");

      if (priorValue == 0) {
        label.setTextFill(Color.DARKGRAY);
      } else if (value > priorValue) {
        label.setTextFill(Color.FORESTGREEN);
      } else {
        label.setTextFill(Color.FIREBRICK);
      }

      label.setMinSize(Label.USE_PREF_SIZE, Label.USE_PREF_SIZE);
      return label;
    }
  }

  public static void main(String[] args) { launch(args); }
}

代码粗略一看没注意到是为什么会变大,仔细看了一下也挺简单,也就是label的大小和字体的设置

      
label.getStyleClass().addAll("default-color0", "chart-line-symbol", "chart-series-line");
label.setStyle("-fx-font-size: 20; -fx-font-weight: bold;");
label.setMinSize(Label.USE_PREF_SIZE, Label.USE_PREF_SIZE);

字体的设置容易理解,但另外二个就不明白了。
分享到:
评论

相关推荐

    JavaFX学习之样例8

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

    javafx2introbyexample:javaFX中的样例代码

    这个名为"javafx2introbyexample"的压缩包包含了《JavaFX 8: Introduction by Example》这本书的示例代码,这本书是学习JavaFX 8编程的一个很好的资源。以下是对这些示例代码所涉及知识点的详细解释: 1. **JavaFX...

    JavaFX2开发教程

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

    我的代码样例

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

    javaFX2.0教程

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

    GUI样例.7z

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

    jfreechart样例

    学习和使用JFreeChart样例,你可以逐步理解JFreeChart库的工作原理,掌握创建各种复杂图表的方法,并在自己的项目中灵活运用。这对于任何需要在Java环境中处理数据可视化需求的开发者来说,都是一个非常宝贵的资源。

    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

    2. **面向对象编程**:Java是一种严格的面向对象语言,样例程序可能会展示类、对象、继承、封装、多态等概念。 3. **异常处理**:Java强制要求捕获异常,样例程序会演示如何使用try-catch-finally语句块处理异常。 ...

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

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

    WebViewSample源码

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

    Java基础案例教程(第2版)-教学设计.zip

    《Java基础案例教程(第2版)》是一本旨在...通过《Java基础案例教程(第2版)》的学习,学生不仅可以掌握Java编程的基本技能,还能通过实践案例提升问题解决能力,为后续的Java进阶学习和实际项目开发打下坚实的基础。

    21天精通java源代码

    2. **类与对象**:Java是面向对象的编程语言,所以理解类和对象的概念至关重要。你会学习如何定义类,创建对象,以及封装、继承和多态这三大面向对象特性。 3. **异常处理**:Java提供了异常处理机制,通过try-...

    JAVA简单实例

    2. **类与对象**: Java是一种面向对象的语言,因此理解和创建类与对象至关重要。类是对象的蓝图,包含数据(属性)和行为(方法)。对象则是类的具体实例。初学者应学会如何定义类、创建对象并调用其方法。 3. **...

    desktop-project:样例项目Kelompok

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

    Jfreechart学习资源

    JFreeChart是一个强大的开源库,专门用于生成高质量的2D图表,适用于各种Java应用程序,包括Swing、JavaFX、Applet以及Servlet。本文将深入探讨JFreeChart的基础知识、主要功能以及如何使用它来创建各种类型的图表。...

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

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

Global site tag (gtag.js) - Google Analytics