Javafx 中的动态条形图

2024-03-18

您好,我正在尝试创建显示字段值的条形图。字段值通过排序算法更改,图表应显示任何更改。

public class FXMLDocumentController implements Initializable {

    static int[] pole = new int[10]; // field
    int hodnota;

    @FXML               // bar chart
    private BarChart barChart; 

    @FXML
    private void handleButtonAction(ActionEvent ev) { //button for filling up new random graph

        for (int i = 0; i < 10; i++) {
            hodnota = intValue((StrictMath.random() * 100));        
            pole[i] = hodnota;
        }

        final CategoryAxis osaX = new CategoryAxis();          
        final NumberAxis osaY = new NumberAxis();
        ObservableList<XYChart.Series<String, Number>> barChartData = FXCollections.observableArrayList();
        final BarChart.Series<String, Number> series1 = new BarChart.Series<>();
        series1.getData().add(new XYChart.Data<>("1", pole[0]));        
        series1.getData().add(new XYChart.Data<>("2", pole[1]));
        series1.getData().add(new XYChart.Data<>("3", pole[2]));
        series1.getData().add(new XYChart.Data<>("4", pole[3]));
        series1.getData().add(new XYChart.Data<>("5", pole[4]));
        series1.getData().add(new XYChart.Data<>("6", pole[5]));
        series1.getData().add(new XYChart.Data<>("7", pole[6]));
        series1.getData().add(new XYChart.Data<>("8", pole[7]));
        series1.getData().add(new XYChart.Data<>("9", pole[8]));
        series1.getData().add(new XYChart.Data<>("10", pole[9]));
        barChartData.add(series1);
        barChart.setData(barChartData);
    }

    @FXML // button which starts sorting algorhitm, it is changing values in field
    private void bubbleButton(ActionEvent ev) { 
        BubbleSort vlakno=new BubbleSort("vypoctoveVlakno");
        vlakno.start(); 
    }     

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }
}

我已经尝试创建一个新线程来一次又一次地加载数据,但它不起作用。还尝试将它们加载到 FXML 控制器中,但图形窗口卡住了。我实际上对此很陌生。

FXML 文档,主要只是从 fxml 加载阶段

<AnchorPane id="AnchorPane" prefHeight="487.0" prefWidth="610.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="radicialgoritmy.FXMLDocumentController"> 
<children>  
<Button fx:id="button" layoutX="14.0" layoutY="14.0" onAction="#handleButtonAction" text="Vygeneruj" />  
<BarChart fx:id="barChart" animated="false" cache="true" layoutX="30.0"     layoutY="188.0" legendVisible="false" prefHeight="292.0" prefWidth="552.0">  
  <xAxis>  
    <CategoryAxis fx:id="osaX" side="BOTTOM" />  
  </xAxis>  
  <yAxis>  
    <NumberAxis fx:id="osaY" side="LEFT" />  
  </yAxis>  
</BarChart>
  <Button fx:id="bubble" layoutX="100.0" layoutY="14.0" mnemonicParsing="false" onAction="#bubbleButton" text="BubbleSort" /> 

排序算法类。

class BubbleSort extends Thread {

    public BubbleSort(final String jmeno) {
        super(jmeno);
    }

    @Override
    public void run() {
        for (int i = 0; i < pole.length - 1; i++) {
            for (int j = 0; j < pole.length - i - 1; j++) {
                if (pole[j] < pole[j + 1]) {
                    final int tmp = pole[j];
                    pole[j] = pole[j + 1];
                    pole[j + 1] = tmp;
                }
                try {
                    Thread.sleep(250);
                } catch (final InterruptedException ex) {
                    Logger.getLogger(BubbleSort.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}

这是 mcve 演示了一种将不断变化的数据耦合到BarChart.
还有其他方法可以实现这种“绑定”,但我试图保持简单。
冒泡排序算法与问题无关,与答案无关 ,所以最好将其排除在外。 mcve 需要演示问题/答案,而不是应用程序:

import java.util.Random;
import javafx.beans.Observable;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener.Change;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Data;

public class FXMLDocumentController {

    @FXML private BarChart barChart;
    private ObservableList<XYChart.Series<String, Number>> barChartData;
    private ObservableList<DataItem> items;
    private  Random rnd = new Random();
    private static  int SIZE = 10;

    @FXML
    void initialize(){
        //an observable collection of DataItem objects, each representing data of one bar 
        items = FXCollections.observableArrayList(
                dataItem -> new Observable[] { dataItem.nameProperty(), dataItem.valueProperty()});
        //initialize with random values 
        for (int i = 0; i < SIZE; i++) {
            items.add(new DataItem(String.valueOf(i), rnd.nextInt(100)));
        }
    }

    @FXML
    private void handleButtonAction( ActionEvent ev) {

         ObservableList<Data<String, Number>> seriesData = new DataConvertor(items).getData();
         CategoryAxis osaX = new CategoryAxis();
         NumberAxis osaY = new NumberAxis();
        barChartData = FXCollections.observableArrayList();
         BarChart.Series<String, Number> series1 = new BarChart.Series<>();
        series1.setData(seriesData);
        barChartData.add(series1);
        barChart.setData(barChartData);
    }

    @FXML
    private void bubbleButton( ActionEvent ev) {
        BubbleSort vlakno=new BubbleSort(items);
        vlakno.start();
    }
}

//pojo to represent items of one bar
class DataItem {

    private StringProperty name = new SimpleStringProperty(this, "name");
    private IntegerProperty value = new SimpleIntegerProperty(this, "value");

    public DataItem( String name,  int value) {
        setName(name);
        setValue(value);
    }
    public StringProperty nameProperty() {
        return name;
    }
    public String getName() {
        return this.nameProperty().get();
    }
    public void setName( String name) {
        this.nameProperty().set(name);
    }
    public  IntegerProperty valueProperty() {
        return value;
    }
    public int getValue() {
        return this.valueProperty().get();
    }
    public void setValue( int value) {
        this.valueProperty().set(value);
    }
}

//simple coupling between items and graph data 
class DataConvertor{

    ObservableList<DataItem> items;
    ObservableList<Data<String, Number>>data;
     DataConvertor( ObservableList<DataItem> items) {
        super();
        this.items = items;
        data =  FXCollections.observableArrayList();
        items.forEach(item -> data.add(new Data<>(item.getName(), item.getValue())));
        items.addListener( ( Change<? extends DataItem> arg0 ) ->   update());
    }

    void update() {
        for(int i =0; i < data.size(); i++){
             Data<String, Number> d = data.get(i);
            d.setYValue(items.get(i).getValue());
        }
        data.clear();
        items.forEach(item -> data.add(new Data<>(item.getName(), item.getValue())));
    }

    ObservableList<Data<String, Number>>getData(){
        return data;
    }
}

The BubbleSort类并没有真正排序。它仅定期且随机地更改数据:

import java.util.Random;
import javafx.animation.PauseTransition;
import javafx.collections.ObservableList;
import javafx.util.Duration;

class BubbleSort  {

    private ObservableList<DataItem> items;
    private Random rnd = new Random();
    private PauseTransition periodicTask;
    private static final long CYCLE = 500;

    public BubbleSort(final ObservableList<DataItem> items) {
        this.items = items;
        periodicTask = new PauseTransition(Duration.millis(CYCLE));
        periodicTask.setOnFinished((e) -> {
            calculateNewValues();
            periodicTask.playFromStart();
        });
    }

    private void calculateNewValues() {
        for(DataItem d : items){
            d.setValue(rnd.nextInt(100));
        }
    }

    void start(){
        periodicTask.playFromStart();
    }
}

请注意,发布的 fxml 文件不完整。这两个标签丢失了:

</children>   
</AnchorPane> 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javafx 中的动态条形图 的相关文章

  • 无法解析类型为 xxx 的任何 bean;限定符:[@javax.enterprise.inject.Any()]

    我有一个 LoginProvider 接口 public interface LoginProvider boolean login String username String password 以及两种不同的实现 public clas
  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 添加动态数量的监听器(Spring JMS)

    我需要添加多个侦听器 如中所述application properties文件 就像下面这样 InTopics Sample QUT4 Sample T05 Sample T01 Sample JT7 注意 这个数字可以多一些 也可以少一些
  • 如何在spring mvc中从控制器名称+操作名称获取映射的URL?

    是否有现有的解决方案可以从 Spring MVC3 中的 控制器名称 操作名称 获取映射的 URL 例如 asp net mvc 或 Rails 中的 UrlHelper 我觉得非常有用 thx 也许 你想要这样的东西 in your Co
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 获取给定类文件的目录路径

    我遇到的代码尝试从类本身的 class 文件所在的同一目录中读取一些配置文件 File configFiles new File this getClass getResource getPath listFiles new Filenam
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop

随机推荐

  • 将 RGB 转换为 HSV 以及将 HSV 转换为 RGB(范围为 0-255)的算法

    我正在寻找从 RGB 到 HSV 的色彩空间转换器 特别是两种色彩空间的 0 到 255 范围 我已经使用它们很长时间了 此时不知道它们来自哪里 请注意 输入和输出 除了以度为单位的角度 都在 0 到 1 0 的范围内 注意 此代码不对输入
  • Java I/O - 重用InputStream对象

    无论如何 是否可以通过更改其内容来重用输入流 没有新的声明 例如 我能够做到非常接近我的要求 但还不够在下面的代码中我使用SequenceInputStream 每次我添加一个新的InputStream到那个顺序 但我想通过使用相同的 in
  • 在 iOS 7 中调整 ModalViewController 的大小并将其放置在中心

    我试图通过减少其宽度和高度来在 iPad 上显示 modalView 但问题是它不是中心对齐的 在 iOS 6 中它曾经工作得很好 但在 iOS 7 中它不是中心对齐的 下面是我的代码 m helpQA HelpQAViewControll
  • 如何让 Rust 单例的析构函数运行?

    这些是我所知道的在 Rust 中创建单例的方法 macro use extern crate lazy static use std sync Mutex Once ONCE INIT derive Debug struct A usize
  • 最小宽度布局。 Nexus 7 中的错误?

    使用layout swdp 限定符时 我得到的结果如附件中所示 sw 限定符应该意味着最小尺寸必须匹配或大于限定符 这似乎不适用于 Nexus 7 运行 4 2 1 我是否对最小宽度限定符的作用感到困惑 或者 N7 报告错误 为了重现我的测
  • Nuxt3 useAsyncData 无法在已安装的生命周期挂钩上工作

    我仍然对我在这里做错了什么感到有点困惑 本质上我有一个 vue 组件 我想在安装元素后异步加载一些数据 我正在使用 NUXT 3 和组合 API 看起来 onMounted 在渲染之前触发 并且没有正确接收数据 如果我将
  • 如何避免课堂自用

    我有以下课程 public class MyClass public void deleteOrganization Organization organization Delete organization Delete related
  • 为什么 ImageIO.read() 这么慢?

    所以我试图从流中获取 PNG 图像 image ImageIO read inputStream 这段代码运行了十秒钟 我认为问题出在缓慢的InputStream上 所以我尝试先将它加载到缓冲区中 byte bytes inputStrea
  • 如何使用JS通过更改另一个字段值来自动更改一个输入字段值

    有两个输入字段total amount delivery charge total amount字段已经有一个值 现在我希望当我输入一些值时delivery charge字段将改变total amount字段的值 Suppose total
  • 如何清除powershell中的变量内容

    我昨天刚开始学习powershell powershell 非常新 我创建了很多变量用于测试目的 以下是我关于变量的问题 如何列出我之前创建的所有变量 那么如何清除变量的所有内容呢 如何移除 删除变量 如何列出我之前创建的所有变量 这会获取
  • Golang:如何创建未知(动态)地图长度

    我可以通过创建 静态 地图 type m map int map int map int bool 但 键 的长度是动态的 unknown len m 1 2 3 4 2 0 true or unk len m 1 2 3 4 true 我
  • 在 Android Kotlin 中查找日期之间的天数差异

    所以 我已经在 google 上搜索 其中大多数使用 Java 有一个使用 Kotlin 并且经常使用与我使用的时间格式不同的时间格式 yyyy mm dd HH mm ss 所以我尝试编码并卡住了 所以 这是代码 import java
  • Spark中使用Map替换列值

    我必须将列列表映射到 Spark 数据集中的另一列 想像这样 val translationMap Map Column Column Map lit foo gt lit bar lit baz gt lit bab 我有一个像这样的数据
  • 如何在R中将时差转换为分钟?

    我有以下程序 timeStart lt Sys time timeEnd lt Sys time difference lt timeEnd timeStart anyVector lt c difference 最后我需要将该数据放入向量
  • 类方法作为 scipy.optimize.curve_fit 的模型函数

    说明书上有这样一句话curve fit that 模型函数 f x 它必须将自变量作为第一个参数 并将参数作为单独的剩余参数进行拟合 但是 我想使用该类的方法作为模型函数 其定义为 def model fun self x par 因此 如
  • 在 WPF 中重复背景画笔

    谢谢你 这个问题与这里这个古老的 未解答的问题非常相似 如何将类似笔记本的线条绘制为 TextBox 背景 https stackoverflow com questions 4041642 wpf how to paint noteboo
  • 带有参数列表的简洁查询

    我正在尝试使用 Dapper 运行带有一组已知参数的查询 但带有这些参数的值列表 我想做的一个简单的例子是 DateTime endDate DateTime Now DateTime startDate endDate AddHours
  • 为什么处理多个异常需要元组而不是列表?

    考虑以下示例 def main list error type try if error type runtime raise RuntimeError list error if error type valueerror raise V
  • 如何在slickgrid中进行多列分组?

    我是 slickgrid 的新手 我已经浏览了一些 slickgrid 的例子 并且基础知识很好 我有一个场景 我需要基于多列进行分组 但 slickgrid 分组是基于单列 如何在 slickgrid 中完成多列分组 并在每个组上具有展开
  • Javafx 中的动态条形图

    您好 我正在尝试创建显示字段值的条形图 字段值通过排序算法更改 图表应显示任何更改 public class FXMLDocumentController implements Initializable static int pole n