0 Replies Latest reply: Nov 16, 2012 3:54 AM by 935521 RSS

    How to draw different parallel horizontal lines?

    935521
      I would like to draw some different parallel horizontal lines, such as this picture

      [http://s17.postimage.org/v8di1zwj3/A02520.png]

      In details, what I'd like to do is:

      1) first left mouse click on point A

      2) second left mouse click on point B, now line from A to B appear

      3) while left mouse is pressed and dragged to the right, 5 retracements lines are plotted at fixed % distance assuming A to B is 100%.

      So line 1 is plotted at point B (0% AB ret), lines 2 is 25%(AB), line 3 is 50%(AB), line 4 is 75%(AB) and line 5 is 100%(AB).

      Here is a code to plot line, how to modify this code?
      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 );
              }
           }
        }
        }
        }
      Thanks!