-
Bug
-
Resolution: Fixed
-
P3
-
7u6
-
2.2.0b14
Look at the attached movie.
Use code to reproduce this:
import java.util.Random;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
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);
StackedBarChart testedStackedBarChart = new StackedBarChart(axisX, axisY);
VBox vb = new VBox();
@Override
public void start(Stage stage) throws Exception {
testedStackedBarChart.setTitle("BarChart");
testedStackedBarChart.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(testedStackedBarChart);
vb.getChildren().addAll(pane, getAddItemHBox(), getAddCategoryDialog(), getRemoveCategoryDialog());
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(value);
newData.setXValue(category);
list.add(newData);
System.out.println(newData + " to category " + category + " value " + value);
}
testedStackedBarChart.getData().add(serie);
}
public HBox getRemoveCategoryDialog() {
HBox hb = new HBox();
Label lb = new Label("From index");
final TextField tf = TextFieldBuilder.create().text("0").prefWidth(50).build();
Button bt = ButtonBuilder.create().text("Remove category!").build();
bt.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
int index = Integer.parseInt(tf.getText());
existingCategories.remove(index);
axisX.getCategories().remove(index);
}
});
hb.getChildren().addAll(lb, tf, bt);
return hb;
}
public HBox getAddCategoryDialog() {
HBox hb = new HBox();
Label lb = new Label("Category");
final TextField tf = TextFieldBuilder.create().text("").prefWidth(50).build();
Label lind = new Label("to index");
final TextField tfind = TextFieldBuilder.create().text("0").prefWidth(50).build();
Button bt = ButtonBuilder.create().text("Add!").build();
bt.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
int index = Integer.parseInt(tfind.getText());
existingCategories.add(index, tf.getText());
axisX.getCategories().add(index, tf.getText());
}
});
hb.getChildren().addAll(lb, tf, lind, tfind, bt);
return hb;
}
public HBox getAddItemHBox() {
HBox hb = new HBox();
Label lb = new Label("Add series named ");
final TextField tf = TextFieldBuilder.create().prefWidth(50).id("Named").build();
Label minLabel = new Label(" min ");
final TextField minText = TextFieldBuilder.create().prefWidth(50).build();
Label maxLabel = new Label(" max ");
final TextField maxText = TextFieldBuilder.create().prefWidth(50).build();
Button bt = ButtonBuilder.create().text("Add!").build();
bt.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
String serieName = tf.getText();
double min = Double.parseDouble(minText.getText());
double max = Double.parseDouble(maxText.getText());
ObservableList list = FXCollections.observableArrayList();
XYChart.Series serie = new XYChart.Series(serieName, list);
for (int i = 0; i < 3; i++) {
XYChart.Data newData = new XYChart.Data();
String category = existingCategories.get(i);
Double value = new Random().nextDouble() * (max - min) + min;
newData.setYValue(value);
newData.setXValue(category);
list.add(newData);
System.out.println(newData + " to category " + category + " value " + value);
}
testedStackedBarChart.getData().add(serie);
}
});
hb.getChildren().addAll(lb, tf, minLabel, minText, maxLabel, maxText, bt);
return hb;
}
}
To add new data: type name of serie, type minimalX, type maximalX, click button.
To remove category (with according data from chart): type index and click according button.
To add category: type name, type index to add, click button.
Use code to reproduce this:
import java.util.Random;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
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);
StackedBarChart testedStackedBarChart = new StackedBarChart(axisX, axisY);
VBox vb = new VBox();
@Override
public void start(Stage stage) throws Exception {
testedStackedBarChart.setTitle("BarChart");
testedStackedBarChart.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(testedStackedBarChart);
vb.getChildren().addAll(pane, getAddItemHBox(), getAddCategoryDialog(), getRemoveCategoryDialog());
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(value);
newData.setXValue(category);
list.add(newData);
System.out.println(newData + " to category " + category + " value " + value);
}
testedStackedBarChart.getData().add(serie);
}
public HBox getRemoveCategoryDialog() {
HBox hb = new HBox();
Label lb = new Label("From index");
final TextField tf = TextFieldBuilder.create().text("0").prefWidth(50).build();
Button bt = ButtonBuilder.create().text("Remove category!").build();
bt.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
int index = Integer.parseInt(tf.getText());
existingCategories.remove(index);
axisX.getCategories().remove(index);
}
});
hb.getChildren().addAll(lb, tf, bt);
return hb;
}
public HBox getAddCategoryDialog() {
HBox hb = new HBox();
Label lb = new Label("Category");
final TextField tf = TextFieldBuilder.create().text("").prefWidth(50).build();
Label lind = new Label("to index");
final TextField tfind = TextFieldBuilder.create().text("0").prefWidth(50).build();
Button bt = ButtonBuilder.create().text("Add!").build();
bt.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
int index = Integer.parseInt(tfind.getText());
existingCategories.add(index, tf.getText());
axisX.getCategories().add(index, tf.getText());
}
});
hb.getChildren().addAll(lb, tf, lind, tfind, bt);
return hb;
}
public HBox getAddItemHBox() {
HBox hb = new HBox();
Label lb = new Label("Add series named ");
final TextField tf = TextFieldBuilder.create().prefWidth(50).id("Named").build();
Label minLabel = new Label(" min ");
final TextField minText = TextFieldBuilder.create().prefWidth(50).build();
Label maxLabel = new Label(" max ");
final TextField maxText = TextFieldBuilder.create().prefWidth(50).build();
Button bt = ButtonBuilder.create().text("Add!").build();
bt.setOnAction(new EventHandler() {
@Override
public void handle(Event t) {
String serieName = tf.getText();
double min = Double.parseDouble(minText.getText());
double max = Double.parseDouble(maxText.getText());
ObservableList list = FXCollections.observableArrayList();
XYChart.Series serie = new XYChart.Series(serieName, list);
for (int i = 0; i < 3; i++) {
XYChart.Data newData = new XYChart.Data();
String category = existingCategories.get(i);
Double value = new Random().nextDouble() * (max - min) + min;
newData.setYValue(value);
newData.setXValue(category);
list.add(newData);
System.out.println(newData + " to category " + category + " value " + value);
}
testedStackedBarChart.getData().add(serie);
}
});
hb.getChildren().addAll(lb, tf, minLabel, minText, maxLabel, maxText, bt);
return hb;
}
}
To add new data: type name of serie, type minimalX, type maximalX, click button.
To remove category (with according data from chart): type index and click according button.
To add category: type name, type index to add, click button.
- relates to
-
JDK-8131065 StackedBarChart - removed Data items are not removed from categoryMap
-
- Open
-