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

在javafx中,TickLevelFormatter不适用于值10 20 30等

江正德
2023-03-14

我不知道为什么会变得困难。我有从2000年到现在的数据。我想画出某个特定月份的图表。这是我为序列添加值的代码。

SimpleDateFormat sfMonth= new SimpleDateFormat("MMM");
    SimpleDateFormat sfYear= new SimpleDateFormat("yyyy");
    SimpleDateFormat sfDate= new SimpleDateFormat("dd");
    double baseprice=0;
    XYChart.Series<Number, Number> series=null;
    int currentYear=0;
    for(DayQuote dq:quotes)
    {
        if(baseprice==0)
        {
            baseprice=dq.getClose();
        }
        if(sfMonth.format(dq.getDate()).equals(month))
        {

            int date=  Integer.parseInt(sfDate.format(dq.getDate()));
            if(series==null)
            {
                series= new XYChart.Series<>();
                currentYear=Integer.parseInt(sfYear.format(dq.getDate()));
            }
            double variance=((dq.getClose()-baseprice)/baseprice)*100;
            if(currentYear==Integer.parseInt(sfYear.format(dq.getDate())))
            {
                series.getData().add(new XYChart.Data<Number, Number>(date,variance));
            }
            else
            {
                //System.out.println("Adding Series");
                series.setName((currentYear-1)+"");
                lineChart.getData().add(series);                    
                series= new XYChart.Series<>();
                currentYear=Integer.parseInt(sfYear.format(dq.getDate()));
                series.getData().add(new XYChart.Data<Number, Number>(date,variance));
            }

        }
        else
        {
            baseprice=dq.getClose();

        }
    }

现在,我正在使用Linechart

LineChart<Number, Number> lineChart=(LineChart<Number, Number>) vBox.getChildren().get(2);

我想在XAxis上将tick显示为12/Jan 13/Jan等,所以我创建了一个TickLevelFormatter。下面是代码

public class DayTickLevelFormattor extends StringConverter<Number> {
private String month;   
@Override
public Number fromString(String date) {

    return Integer.parseInt(date.split("/")[0]);
}
@Override
public String toString(Number date) {
    //System.out.println("Printed Date"+date.intValue()+"/"+month);
    if(date.intValue()!=10)
    {
        return (date.intValue()+1)+"/"+month;
    }
    else
    {
        System.out.println("Issue");
        return (date.intValue()+1)+"/"+month;
    }
}

public String getMonth() {
    return month;
}

public void setMonth(String month) {
    this.month = month;
}

}

但是我的图表没有显示日期10、20等的正确标签。此外,我将XAxis的范围设置为1到30或31,但它仍然超出了这个限制,并显示33/Apr(这让我觉得非常愚蠢)

请让我知道这个问题的解决方法。

共有1个答案

厍胤运
2023-03-14

我不知道这是否能回答你的问题,因为没有足够的代码。我猜轴是自动测距的,它在每边添加了一些填充。也没有0Mar。

我看不出你在哪里调用setMonth(),但我敢打赌,当它是10的倍数时,解析日期时会有一些错误。

您可以通过使用长(实际的java/unix日期)的格式化程序并使用您想要的格式(如d/MMM)来解决这个问题。或者,您可以将自动范围设置为false,并将边界设置为1-

顺便说一句,轴格式化程序中有一个后缀功能,但我从未使用过它。您可以使用它来添加月份名称,如果它们都相同。https://docs.oracle.com/javafx/2/api/javafx/scene/chart/NumberAxis.DefaultFormatter.html

 类似资料:
  • 问题内容: 我正在尝试学习JavaFX,并且已经编写了下面显示的代码,但是我似乎在使用以下代码行时遇到麻烦: 在强调setOnAction的位置并显示此错误: 我究竟做错了什么? 问题答案: 您已经导入了awt事件监听器,只需更改此行代码 有了这个 你也可以像这样使用lambda表达式

  • 我正在尝试学习JavaFX,我已经编写了下面所示的代码,但这行代码似乎有问题: 其中它在setOnAction下划线,并打印此错误: 我做错了什么?

  • 问题内容: 我试图使用 AngularJS 提供的和函数显示/隐藏一些HTML 。 **** 根据文档,这些功能的各自用法如下: ngHide – {表达式}-如果表达式为true,则分别显示或隐藏该元素。ngShow – {表达式}-如果表达式为真,则分别显示或隐藏该元素。 这适用于以下用例: 但是,如果我们使用对象中的参数作为表达式,则和被赋予正确的/ 值,但这些值不会被视为布尔值,因此始终返

  • 如果我们运行查询(带或不带where子句参数),它都能正常工作。 如果我们在准备好的语句中使用硬编码的参数运行查询,它也可以正常工作。 如果以编程方式设置prepared语句的参数,则不起作用。 以上测试确认JDBC连接正常工作。 使用PreparedStatement、JdbcTemplate或NamedParameterJdbcTemplate时也会出现相同的错误,因此我怀疑PreparedS

  • 问题内容: 这是一个正常工作的web.xml: 当我删除元素并使用以下注释时: 然后,Tomcat 7.0.14给我以下错误: 我遵循了[这个问题](http://codingdict.com/questions/115618的答案,但这对我不起作用。 这是我的Web应用程序的依赖项: 编辑:我只有在使用Tomcat(7.0.14)时才有问题。玻璃鱼很好。 问题答案: 这是Tomcat7中的错误。