Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Charts 如何绘制百分比回撤线?_Charts_Line_Javafx 2 - Fatal编程技术网

Charts 如何绘制百分比回撤线?

Charts 如何绘制百分比回撤线?,charts,line,javafx-2,Charts,Line,Javafx 2,下图显示了我的问题 我想做的是: 1) 首先用鼠标左键单击A点 2) 第二次鼠标左键单击B点,现在显示从A到B的直线 3) 当按下鼠标左键并向右拖动时,假设A到B为100%,将以固定的%距离绘制5条回溯线 因此,线1在点B(0%AB ret)绘制,线2为25%(AB),线3为50%(AB),线4为75%(AB),线5为100%(AB) 下面是绘制线条的代码 import javafx.application.Application; import javafx.event.EventHandl

下图显示了我的问题

我想做的是:

1) 首先用鼠标左键单击A点

2) 第二次鼠标左键单击B点,现在显示从A到B的直线

3) 当按下鼠标左键并向右拖动时,假设A到B为100%,将以固定的%距离绘制5条回溯线

因此,线1在点B(0%AB ret)绘制,线2为25%(AB),线3为50%(AB),线4为75%(AB),线5为100%(AB)

下面是绘制线条的代码

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;

public class Lines extends Application {

Path path;

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

@Override
public void start(Stage stage) {

    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis(1, 11, 0.1);
    yAxis.setTickUnit(1);
    //yAxis.setPrefWidth(35);
    yAxis.setMinorTickCount(10);
    yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis) {
        @Override
        public String toString(Number object) {
            String label;
            label = String.format("%7.2f", object.floatValue());
            return label;
        }
    });
    final LineChart<String, Number> lineChart = new LineChart<String, Number>(xAxis, yAxis);

    lineChart.setCreateSymbols(false);
    lineChart.setAlternativeRowFillVisible(false);
    lineChart.setLegendVisible(false);

    XYChart.Series series1 = new XYChart.Series();

    series1.getData().add(new XYChart.Data("Jan", 1.5));
    series1.getData().add(new XYChart.Data("Feb", 4));
    series1.getData().add(new XYChart.Data("Mar", 2.5));
    series1.getData().add(new XYChart.Data("Apr", 5));
    series1.getData().add(new XYChart.Data("May", 6));
    series1.getData().add(new XYChart.Data("Jun", 10.5));
    series1.getData().add(new XYChart.Data("Jul", 6));
    series1.getData().add(new XYChart.Data("Aug", 7.5));
    series1.getData().add(new XYChart.Data("Sep", 7.5));
    series1.getData().add(new XYChart.Data("Oct", 6));
    series1.getData().add(new XYChart.Data("Nov", 5.5));
    series1.getData().add(new XYChart.Data("Dec", 4));

    BorderPane bp = new BorderPane();
    bp.setCenter(lineChart);
    Scene scene = new Scene(bp, 800, 600);
    lineChart.setAnimated(false);
    lineChart.getData().addAll(series1);

    Lines.MouseHandler mh = new Lines.MouseHandler( bp );
    bp.setOnMouseClicked( mh );
    bp.setOnMouseMoved( mh );

    stage.setScene(scene);

    path = new Path();
    path.setStrokeWidth(1);
    path.setStroke(Color.BLACK);

    scene.setOnMouseDragged(mh);
    scene.setOnMousePressed(mh);
    bp.getChildren().add(path);
    stage.setScene(scene);
    stage.show();
}

class MouseHandler implements EventHandler< MouseEvent > {
private boolean gotFirst    = false;
private Line    line;
private Pane    pane;
private double  x1, y1, x2, y2;

public MouseHandler( Pane pane ) {
    this.pane = pane;
}    
@Override
public void handle( MouseEvent event ) {
    if( event.getEventType() == MouseEvent.MOUSE_CLICKED ) {
        if( !gotFirst ) {
            x1 = x2 = event.getX();
            y1 = y2 = event.getY();
            line = new Line( x1, y1, x2, y2 );

            pane.getChildren().add( line );

            gotFirst = true;
        } 
        else {
            line = null;
            gotFirst = false;
        }
    } 
        else {
            if( line != null ) {
                x2 = event.getX();
                y2 = event.getY();
                // update line
                line.setEndX( x2 );
                line.setEndY( y2 );
        }
     }
  }
  }
  }
导入javafx.application.application;
导入javafx.event.EventHandler;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.chart.CategoryAxis;
导入javafx.scene.chart.LineChart;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.XYChart;
导入javafx.scene.control.Label;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.Pane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Line;
导入javafx.scene.shape.LineTo;
导入javafx.scene.shape.MoveTo;
导入javafx.scene.shape.Path;
导入javafx.stage.stage;
公共类行扩展了应用程序{
路径;
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公众假期开始(阶段){
最终CategoryAxis xAxis=新CategoryAxis();
最终数字轴yAxis=新数字轴(1,11,0.1);
yAxis.setTickUnit(1);
//yAxis.setPrefWidth(35);
yAxis.setMinorTickCount(10);
yAxis.setTickLabelFormatter(新编号Axis.DefaultFormatter(yAxis){
@凌驾
公共字符串toString(数字对象){
字符串标签;
label=String.format(“%7.2f”,object.floatValue());
退货标签;
}
});
最终线形图线形图=新线形图(xAxis,yAxis);
lineChart.setCreateSynumbles(false);
线形图.setAlternativeRowFillVisible(假);
线形图。setLegendVisible(假);
XYChart.Series系列1=新的XYChart.Series();
series1.getData().add(新的XYChart.Data(“Jan”,1.5));
series1.getData().add(新的XYChart.Data(“Feb”,4));
series1.getData().add(新的XYChart.Data(“Mar”,2.5));
series1.getData().add(新的XYChart.Data(“Apr”,5));
series1.getData().add(新的XYChart.Data(“May”,6));
series1.getData().add(新的XYChart.Data(“Jun”,10.5));
series1.getData().add(新的XYChart.Data(“Jul”,6));
series1.getData().add(新的XYChart.Data(“Aug”,7.5));
series1.getData().add(新的XYChart.Data(“Sep”,7.5));
series1.getData().add(新的XYChart.Data(“Oct”,6));
series1.getData().add(新的XYChart.Data(“Nov”,5.5));
series1.getData().add(新的XYChart.Data(“Dec”,4));
BorderPane bp=新的BorderPane();
设置中心(折线图);
场景=新场景(bp,800600);
线形图。设置动画(假);
lineChart.getData().addAll(series1);
Lines.MouseHandler mh=新的Lines.MouseHandler(bp);
bp.setOnMouseClicked(mh);
英国石油公司setOnMouseMoved(mh);
舞台场景;
路径=新路径();
路径设置行程宽度(1);
路径设定行程(颜色为黑色);
场景.设置鼠标拖动(mh);
场景。设置鼠标按下(mh);
bp.getChildren().add(路径);
舞台场景;
stage.show();
}
类MouseHandler实现EventHandler{
private boolean gotFirst=false;
专线;
专用窗格;
专用双x1,y1,x2,y2;
公共鼠标手柄(窗格){
this.pane=窗格;
}    
@凌驾
公共无效句柄(MouseeEvent事件){
如果(event.getEventType()==MouseEvent.MOUSE_单击){
如果(!gotFirst){
x1=x2=event.getX();
y1=y2=event.getY();
直线=新线(x1,y1,x2,y2);
pane.getChildren().add(行);
gotFirst=true;
} 
否则{
行=空;
gotFirst=false;
}
} 
否则{
如果(行!=null){
x2=event.getX();
y2=event.getY();
//更新行
行。setEndX(x2);
行。setEndY(y2);
}
}
}
}
}
如何做到这一点

谢谢