当前位置: 首页 > 知识库问答 >
问题:

如何pan JavaFX LineChart

松新
2023-03-14

在JavaFx中,我有一个LineChartLC,

lc.getData().addAll(series1);

它显示得很好,但似乎可以对所有数据点进行采样,以便将整个域放入图表中。

是否有一种方法可以强制LineChart只显示系列的最后10个数据点?

最后,我想创建一种方法来平移图表内容,以便显示一个窗口的数据,作为平移位置的函数。

我找到了这个SO post但是它删除了数据,这意味着我需要将它添加回来。我宁愿在可能的情况下将所有数据保留在系列中,并在可能的情况下设置那个系列的可用范围。

共有1个答案

宰父飞翼
2023-03-14

我自己用标准的fx库解决了这个问题。

只要横轴是NumberAxis,就可以使用SetLowerBound()SetUpperBound()函数。

结合滚动条,这是完美的工作。

例如,

    final static int MAX_DISPLAY = 100
    LineChart<Number, Number> lineChart;
    ScrollBar scroller;

    scroller.setMin(0);
    scroller.setMax(1000 - MAX_DISPLAY);

    scroller.valueProperty().addListener(new ChangeListener<Number>() {

        @Override
        public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {

            double pos = scroller.getValue();

            NumberAxis na = (NumberAxis)lineChart.getXAxis();
            na.setLowerBound(pos);
            na.setUpperBound(pos + MAX_DISPLAY);
        }
    });

注意-如果使用Scene Builder,您的LineChart x-axis将默认为CatergoryAxis,因此请确保编辑.fxml文件并手动将其更改为NumberAxis。

此外,对于我的用例,由于X轴表示Unix纪元时间,您可以使用以下代码将number值转换为其他值(在我的示例中是日期格式的字符串),

        NumberAxis xAxis = (NumberAxis)lineChart.getXAxis();

        xAxis.setTickLabelFormatter(new StringConverter<Number>() {

            @Override
            public String toString(Number object) {

                return convertToDate(object.longValue());
            }

            @Override
            public Number fromString(String string) {
                return 0;
            }
        });
 类似资料:
  • 我在这里看到了下面的代码。描述说: 我们还可以使用自动 我确实理解汽车的衰退

  • 问题内容: 我有一个水平线,我需要将每个垂直线居中。我的标记如下。每个都有一个边框,我需要物品及其内容垂直位于中间。请帮忙; 我是CSS新手。 问题答案: 我假设由于您使用的是XML声明,因此您不必担心IE或较旧的浏览器。 所以,你可以使用和像这样:

  • 问题内容: 如何将无序列表居中放置为固定宽度? 问题答案: 要使ul 居中并使li元素也居中,并使ul的宽度动态变化,请使用display:inline-block; 并将其包裹在居中的div中。

  • 问题内容: 如何使用CSS 在另一个文件中水平居中? 问题答案: 您可以将此CSS应用于内部: 当然,您不必将设置为。任何小于包含宽度的宽度都可以使用。是什么呢实际定心。 如果您以Internet Explorer 8(及更高版本)为目标,最好改用以下方法: 它将使内部元素水平居中,并且无需设置特定的 width。 这里的工作示例:

  • 我在做一个宠物项目(一种游戏)。我遇到了一个问题:当从控制台用命令调用应用程序时: 播放短的声音,但不播放长的声音。所有声音都在JAR中的“/资产”文件夹中。 音频的路径如下所示: 例如射击或跳跃。对于长音频数据,仅播放前 0.5 秒。 例如:如果您加载长度为0.834秒的声音,那么它会循环(背景音乐),声音将循环播放!(WAV 文件,0.843 秒,48 KB)。但是,如果加载 WAV 文件 2

  • 浏览器环境下的javascript, 实际上有两个天生缺陷: 不严谨. 不同浏览器的js实现上会略有不同. 这个问题在android, ios上也一样. 不是严格意义上的计算编程语言. 有语法漏洞. 例如 == 所以, 我们要驾驭好JS语言,就要知道如何有效的Debug. 时刻留意 vue server 我们开发时的命令: $ npm run dev 会开启一个"开发服务器", 这个开发服务器的

  • 如何验证 Email 地址是否有效 一般来说,你不能。有一些看起来合理的方法可以使用,但却没有办法检测地址 是否实际可以投递,如果没有实际尝试投递的话。 使用正则表达式: # Match basically blah@blah.blah if ( $addr =~ /^\S+\@\S+\.\S+$/ ) { print "Looks OK"; } 如果你干真活的话,可能希望看看 CPAN

  • 假设我创建了这样一个RDD(我使用的是Pyspark): 然后我用方法打印分区元素并获得 Spark是如何决定如何划分我的列表的?元素的特定选择来自哪里?它可以以不同的方式耦合它们,只留下0和10以外的一些其他元素,以创建6个请求的分区。在第二次运行中,分区是相同的。 使用更大的范围,有29个元素,我得到2个元素后跟3个元素的模式的分区: 使用更小范围的9个元素,我得到 因此,我推断Spark是通