flamexmt 2017-05-12 05:19
浏览 2778
已结题

javafx按钮点击后事件响应不完全

给按钮绑定了一个生成javafx中折线图的时间,界面是通过fxml构建的所以时间也是用fxml绑定的。在第一次点击按钮之后,显示的图表并不完整,横坐标的值显示不完整,绑定的node也没有显示出来,再次点击之后才能显示。
如图,这是第一次点击:图片说明
再次点击过后:图片说明
用于构建折线图的数据没有变动过。
下面是这个方法的代码:
public void setChart(StockCondition sc1,StockCondition sc2){
Close.getData().clear();
log.getData().clear();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
DecimalFormat df2 = new DecimalFormat("######0.00000000");

    Name1.setText(sc1.getName());
    High1.setText(String.valueOf(sc1.getPeak()));
    Low1.setText(String.valueOf(sc1.getValley()));
    Log1.setText(df2.format(sc1.getProfit2()));
    Name2.setText(sc2.getName());
    High2.setText(String.valueOf(sc2.getPeak()));
    Low2.setText(String.valueOf(sc2.getValley()));
    Log2.setText(df2.format(sc2.getProfit2()));


    //下面设置第一个表
    int amount1=sc1.getSum().size();
    int amount2=sc2.getSum().size();
    int amount=0;
    if(amount1<amount2){
        amount=amount1;
    }else{
        amount=amount2;
    }
    double interval=0;
    double location=0;
    int middle=0;
    if(amount>100){
        interval=(double)amount/99;
        middle=98;
    }
    else{
        interval=1;
        middle=amount-2;
    }
    System.out.println("interval is "+interval);
    System.out.println("middle is "+middle);
    System.out.println("amount is "+amount);
    System.out.println(sc2.getSum().get(sc2.getSum().size()-1).getDate());

    yAxis.setAutoRanging(false);
    if(sc1.getPeak()>sc2.getPeak()){
        yAxis.setUpperBound(sc1.getPeak()*1.1);
    }
    else{
        yAxis.setUpperBound(sc2.getPeak()*1.1);
    }
    if(sc1.getValley()<sc2.getValley()){
        yAxis.setLowerBound(sc1.getValley()*0.9);       
    }
    else{
        yAxis.setLowerBound(sc2.getValley()*0.9);
    }
    BigDecimal bg = new BigDecimal((yAxis.getUpperBound()-yAxis.getLowerBound())/5).setScale(1, RoundingMode.UP);
    yAxis.setTickUnit(bg.doubleValue());
    xAxis.setTickMarkVisible(false);
    xAxis.setTickLabelRotation(5);
    XYChart.Series series1 = new XYChart.Series();
    XYChart.Series series2 = new XYChart.Series();
    series1.setName(sc1.getName());
    series2.setName(sc2.getName());
    Close.setTitle("每日股价");
    location=0;
    for(int i=0;i<middle+2;i++){
        XYChart.Data data1=new XYChart.Data(sdf.format(sc1.getSum().get((int)location).getDate()),sc1.getSum().get((int)location).getClose());
        Button circle1=new Button();
        circle1.setPrefSize(7, 7);
        Tooltip tooltip1 = new Tooltip();
        tooltip1.setText(sc1.getName()+"\n"+sdf.format(sc1.getSum().get((int)location).getDate())+"\n股价:"+String.valueOf(sc1.getSum().get((int)location).getClose()));
        circle1.setTooltip(tooltip1);
        data1.setNode(circle1);
        circle1.setStyle("-fx-background-color:#FF7F00");


        XYChart.Data data2=new XYChart.Data(sdf.format(sc1.getSum().get((int)location).getDate()),sc2.getSum().get((int)location).getClose());
        Button circle2=new Button();
        circle2.setPrefSize(7, 7);
        Tooltip tooltip2 = new Tooltip();
        tooltip2.setText(sc2.getName()+"\n"+sdf.format(sc1.getSum().get((int)location).getDate())+"\n股价:"+String.valueOf(sc2.getSum().get((int)location).getClose()));
        circle2.setTooltip(tooltip2);
        data2.setNode(circle2);
        circle2.setStyle("-fx-background-color:#FFB90F");

        series1.getData().add(data1);
        series2.getData().add(data2);
        location=location+interval;
        if(location>=amount-1){
            location=amount-1;
        }
    }
    System.out.println("location is "+location);
    Close.getData().addAll(series1,series2);
    //下面设置第二个表
    XYChart.Series seriesLog1 = new XYChart.Series();
    XYChart.Series seriesLog2 = new XYChart.Series();
    seriesLog1.setName(sc1.getName());
    seriesLog2.setName(sc2.getName());
    log.setTitle("每日对数收益率");
    location=0;
    for(int i=0;i<middle-1;i++){
        XYChart.Data data3=new XYChart.Data(sdf.format(sc1.getSum().get((int)location).getDate()),sc1.getSum().get((int)location).getProfit());
        Button circle3=new Button();
        circle3.setPrefSize(7, 7);
        Tooltip tooltip3 = new Tooltip();
        tooltip3.setText(sc1.getName()+"\n"+sdf.format(sc1.getSum().get((int)location).getDate())+"\n股价:"+String.valueOf(sc1.getSum().get((int)location).getProfit()));
        circle3.setTooltip(tooltip3);
        data3.setNode(circle3);
        circle3.setStyle("-fx-background-color:#FF7F00");

        XYChart.Data data4=new XYChart.Data(sdf.format(sc1.getSum().get((int)location).getDate()),sc2.getSum().get((int)location).getProfit());
        Button circle4=new Button();
        circle4.setPrefSize(7, 7);
        Tooltip tooltip4 = new Tooltip();
        tooltip4.setText(sc2.getName()+"\n"+sdf.format(sc1.getSum().get((int)location).getDate())+"\n收益率:"+String.valueOf(sc2.getSum().get((int)location).getProfit()));
        circle4.setTooltip(tooltip4);
        data4.setNode(circle4);
        circle4.setStyle("-fx-background-color:#FFB90F");

        seriesLog1.getData().add(data3);
        seriesLog2.getData().add(data4);
        location=location+interval;
        if(location>=amount-1){
            location=amount-1;
        }
    }

    log.getData().addAll(seriesLog1,seriesLog2);

    xAxis.setTickLabelsVisible(true);
    xAxis1.setTickLabelsVisible(true);


    Close.setHorizontalGridLinesVisible(false);
    Close.setVerticalGridLinesVisible(false);
    log.setHorizontalGridLinesVisible(false);
    log.setVerticalGridLinesVisible(false);
    Close.setCreateSymbols(false);
    log.setCreateSymbols(false);
    log.setVisible(true);
    Close.setVisible(true);
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
    • ¥15 使用phpstudy在云服务器上搭建个人网站
    • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
    • ¥15 vue3+express部署到nginx
    • ¥20 搭建pt1000三线制高精度测温电路
    • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
    • ¥15 画两个图 python或R
    • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
    • ¥15 八路抢答器设计出现故障
    • ¥15 opencv 无法读取视频