Look at the attached movie and use an attached application.
Code:
import java.util.Random;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
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 axisY = new NumberAxis(0, 100, 10);
ObservableList<String> existingCategories = FXCollections.observableArrayList();
CategoryAxis axisX = new CategoryAxis(existingCategories);
BarChart testedBarChart = new BarChart(axisY, axisX);
VBox vb = new VBox();
@Override
public void start(Stage stage) throws Exception {
testedBarChart.setTitle("BarChart");
testedBarChart.setStyle("-fx-border-color: darkgray;");
existingCategories.addAll("category1", "category2", "category3");
addData();
Pane pane = new Pane();
pane.setPrefSize(600, 600);
pane.setPrefSize(600, 600);
pane.getChildren().add(testedBarChart);
Slider slider1 = new Slider(-400, 400, 0);
slider1.setShowTickLabels(true);
slider1.setShowTickMarks(true);
slider1.valueProperty().bindBidirectional(axisX.endMarginProperty());
Slider slider2 = new Slider(-400, 400, 0);
slider2.setShowTickLabels(true);
slider2.setShowTickMarks(true);
slider2.valueProperty().bindBidirectional(axisX.startMarginProperty());
vb.getChildren().addAll(pane, new Label("End margin:"), slider1, new Label("Start margin:"), slider2);
Scene scene = new Scene(vb, 700, 700);
stage.setScene(scene);
stage.show();
}
public void addData() {
String serieName = "Serie";
double min = 0;
double max = 100;
int amount = 3;
ObservableList list = FXCollections.observableArrayList();
XYChart.Series serie = new XYChart.Series(serieName, list);
for (int i = 0; i < amount; i++) {
XYChart.Data newData = new XYChart.Data();
String category = existingCategories.get(i);
Double value = new Random().nextDouble() * (max - min) + min;
newData.setYValue(category);
newData.setXValue(value);
list.add(newData);
System.out.println(newData + " to category " + category + " value " + value);
}
testedBarChart.getData().add(serie);
}
}
Having one slider in a fixed state, move the other slider leftward and right ward, to find a value, where mentioned effect happens.
Code:
import java.util.Random;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
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 axisY = new NumberAxis(0, 100, 10);
ObservableList<String> existingCategories = FXCollections.observableArrayList();
CategoryAxis axisX = new CategoryAxis(existingCategories);
BarChart testedBarChart = new BarChart(axisY, axisX);
VBox vb = new VBox();
@Override
public void start(Stage stage) throws Exception {
testedBarChart.setTitle("BarChart");
testedBarChart.setStyle("-fx-border-color: darkgray;");
existingCategories.addAll("category1", "category2", "category3");
addData();
Pane pane = new Pane();
pane.setPrefSize(600, 600);
pane.setPrefSize(600, 600);
pane.getChildren().add(testedBarChart);
Slider slider1 = new Slider(-400, 400, 0);
slider1.setShowTickLabels(true);
slider1.setShowTickMarks(true);
slider1.valueProperty().bindBidirectional(axisX.endMarginProperty());
Slider slider2 = new Slider(-400, 400, 0);
slider2.setShowTickLabels(true);
slider2.setShowTickMarks(true);
slider2.valueProperty().bindBidirectional(axisX.startMarginProperty());
vb.getChildren().addAll(pane, new Label("End margin:"), slider1, new Label("Start margin:"), slider2);
Scene scene = new Scene(vb, 700, 700);
stage.setScene(scene);
stage.show();
}
public void addData() {
String serieName = "Serie";
double min = 0;
double max = 100;
int amount = 3;
ObservableList list = FXCollections.observableArrayList();
XYChart.Series serie = new XYChart.Series(serieName, list);
for (int i = 0; i < amount; i++) {
XYChart.Data newData = new XYChart.Data();
String category = existingCategories.get(i);
Double value = new Random().nextDouble() * (max - min) + min;
newData.setYValue(category);
newData.setXValue(value);
list.add(newData);
System.out.println(newData + " to category " + category + " value " + value);
}
testedBarChart.getData().add(serie);
}
}
Having one slider in a fixed state, move the other slider leftward and right ward, to find a value, where mentioned effect happens.