Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8087380

[Axis] rotation is applied without translate (shift)

    XMLWordPrintable

    Details

      Description

      Look at the attached movie.

      I've applied formatter, to make label to be longer (wider). and started to rotate. You may see, that if angle equal to +/-50 degrees, then labels look like corresponding to the neighbor tick. I've demonsrated it in the end, that zero label correspond to the first tick.

      Code:

      import java.util.Arrays;
      import java.util.Comparator;
      import java.util.Random;
      import javafx.application.Application;
      import javafx.collections.FXCollections;
      import javafx.collections.ObservableList;
      import javafx.scene.Scene;
      import javafx.scene.chart.LineChart;
      import javafx.scene.chart.NumberAxis;
      import javafx.scene.chart.XYChart;
      import javafx.scene.control.Slider;
      import javafx.scene.layout.Pane;
      import javafx.scene.layout.VBox;
      import javafx.stage.Stage;
      import javafx.util.StringConverter;

      public class JavaCharts extends Application {
          
          public static void main(String[] args) {
              launch(args);
          }
          NumberAxis axis1 = new NumberAxis(0, 100, 10);
          NumberAxis axis2 = new NumberAxis(0, 100, 10);
          LineChart testedLineChart = new LineChart(axis1, axis2);
          VBox vb = new VBox();
          
          @Override
          public void start(Stage stage) throws Exception {
              testedLineChart.setTitle("LineChart");
              testedLineChart.setStyle("-fx-border-color: darkgray;");
              
              ObservableList list = FXCollections.observableArrayList();
              int max = 100;
              int min = 30;
              
              for (int i = 0; i < 30; i++) {
                  XYChart.Data newData = new XYChart.Data();
                  newData.setXValue(new Random().nextDouble() * (max - min) + min);
                  newData.setYValue(new Random().nextDouble() * (max - min) + min);
                  list.add(newData);
              }
              Object[] array = list.toArray();
              Arrays.sort(array, new Comparator() {
                  
                  @Override
                  public int compare(Object t, Object t1) {
                      return (int) Math.round(((Double) ((XYChart.Data) t).getXValue()) - ((Double) ((XYChart.Data) t1).getXValue()));
                  }
              });
              
              XYChart.Series serie = new XYChart.Series("serie", FXCollections.observableArrayList(array));
              
              testedLineChart.getData().add(serie);
              testedLineChart.setAlternativeColumnFillVisible(true);
              testedLineChart.setAlternativeRowFillVisible(true);
              
              Pane pane = new Pane();
              pane.setPrefSize(600, 600);
              
              axis2.setTickLabelFormatter(new ChartsLabelFormatter<Number>());
              
              Slider slider = new Slider(-60, 60, 0);
              slider.valueProperty().bindBidirectional(axis2.tickLabelRotationProperty());
              
              pane.setPrefSize(600, 600);
              pane.getChildren().add(testedLineChart);
              
              vb.getChildren().addAll(pane, slider);
              
              Scene scene = new Scene(vb, 700, 700);
              stage.setScene(scene);
              stage.show();
          }
          
          private static class ChartsLabelFormatter<Number> extends StringConverter<Number> {
              
              @Override
              public String toString(Number t) {
                  return "Form" + t;
              }
              
              @Override
              public Number fromString(String string) {
                  throw new UnsupportedOperationException("Not supported yet.");
              }
          }
      }

      Just move slider to rotate the labels.

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            akirov Alexander Kirov (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Dates

              Created:
              Updated:
              Imported: