You may see it on the attached movie.
I added some data to chart - one line.
After that I set lower bound to value > 0, so zero is not in shown range. I set autoranging to true, and force zero in range to true sequently. It doesn't affect. After that I add additional data, which has the minX value (minimal X argument) more then 0 again (not to affect on appearing of zero in range). After that option on zero in range forcing affected.
Code to reproduce:
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.ToggleButton;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
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);
Pane pane = new Pane();
pane.setPrefSize(600, 600);
axis1.setLowerBound(min);
ToggleButton tb1 = new ToggleButton("Autoranging");
tb1.selectedProperty().bindBidirectional(axis1.autoRangingProperty());
ToggleButton tb2 = new ToggleButton("Force zero in range");
tb2.selectedProperty().bindBidirectional(axis1.forceZeroInRangeProperty());
pane.setPrefSize(600, 600);
pane.getChildren().add(testedLineChart);
vb.getChildren().addAll(pane, tb1, tb2);
Scene scene = new Scene(vb, 700, 700);
stage.setScene(scene);
stage.show();
}
}
Just switch toggle buttons, to change autoRanging and forceZeroInRange properties' values.
I added some data to chart - one line.
After that I set lower bound to value > 0, so zero is not in shown range. I set autoranging to true, and force zero in range to true sequently. It doesn't affect. After that I add additional data, which has the minX value (minimal X argument) more then 0 again (not to affect on appearing of zero in range). After that option on zero in range forcing affected.
Code to reproduce:
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.ToggleButton;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
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);
Pane pane = new Pane();
pane.setPrefSize(600, 600);
axis1.setLowerBound(min);
ToggleButton tb1 = new ToggleButton("Autoranging");
tb1.selectedProperty().bindBidirectional(axis1.autoRangingProperty());
ToggleButton tb2 = new ToggleButton("Force zero in range");
tb2.selectedProperty().bindBidirectional(axis1.forceZeroInRangeProperty());
pane.setPrefSize(600, 600);
pane.getChildren().add(testedLineChart);
vb.getChildren().addAll(pane, tb1, tb2);
Scene scene = new Scene(vb, 700, 700);
stage.setScene(scene);
stage.show();
}
}
Just switch toggle buttons, to change autoRanging and forceZeroInRange properties' values.
- relates to
-
JDK-8117794 Axis doesn't respond to autoRanging and other properties change
-
- Closed
-