ensemble.samplepage.PieChartDataVisualizer Maven / Gradle / Ivy
/*
* Copyright (c) 2012, 2015, Oracle and/or its affiliates.
* All rights reserved. Use is subject to license terms.
*
* This file is available and licensed under the following license:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the distribution.
* - Neither the name of Oracle Corporation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package ensemble.samplepage;
import ensemble.samples.charts.pie.chart.PieChartApp;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableRow;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.input.ContextMenuEvent;
import javafx.util.StringConverter;
public class PieChartDataVisualizer extends TableView {
PieChart chart;
public PieChartDataVisualizer(final PieChart chart) {
this.chart = chart;
setItems(chart.getData());
setEditable(true);
setMinHeight(100);
setMinWidth(100);
chart.dataProperty().addListener((ObservableValue extends ObservableList> ov, ObservableList t, ObservableList t1) -> {
setItems(t1);
});
TableColumn nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory((CellDataFeatures p) -> p.getValue().nameProperty());
nameColumn.setCellFactory(TextFieldTableCell.forTableColumn());
nameColumn.setEditable(true);
nameColumn.setSortable(false);
nameColumn.setMinWidth(80);
TableColumn pieValueColumn = new TableColumn<>("PieValue");
pieValueColumn.setCellValueFactory((CellDataFeatures p) -> p.getValue().pieValueProperty());
pieValueColumn.setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter() {
@Override
public String toString(Number t) {
return t == null ? null : t.toString();
}
@Override
public Number fromString(String string) {
if (string == null) {
return null;
}
try {
return (Double) new Double(string);
} catch (Exception ignored) {
return 0;
}
}
}));
pieValueColumn.setEditable(true);
pieValueColumn.setSortable(false);
pieValueColumn.setMinWidth(80);
setOnContextMenuRequested((ContextMenuEvent t) -> {
Node node = t.getPickResult().getIntersectedNode();
while (node != null && !(node instanceof TableRow) && !(node instanceof TableCell)) {
node = node.getParent();
}
if (node instanceof TableCell) {
TableCell tc = (TableCell) node;
getSelectionModel().select(tc.getIndex());
} else if (node instanceof TableRow) {
TableRow tr = (TableRow) node;
if (tr.getItem() == null) {
getSelectionModel().clearSelection();
} else {
getSelectionModel().select(tr.getIndex());
}
}
});
MenuItem item1 = new MenuItem("Insert item");
item1.setOnAction(new EventHandler() {
long itemIndex = 0;
@Override
public void handle(ActionEvent t) {
int index = getSelectionModel().getSelectedIndex();
if (index < 0 || index >= chart.getData().size()) {
index = chart.getData().size();
}
chart.getData().add(index, new Data("Item " + (++itemIndex), Math.random() * 100));
getSelectionModel().select(index);
}
});
MenuItem item2 = new MenuItem("Delete item");
item2.setOnAction((ActionEvent t) -> {
int index = getSelectionModel().getSelectedIndex();
if (index >= 0 && index < chart.getData().size()) {
chart.getData().remove(index);
}
});
MenuItem item3 = new MenuItem("Clear data");
item3.setOnAction((ActionEvent t) -> {
chart.getData().clear();
});
MenuItem item4 = new MenuItem("Set new data");
item4.setOnAction((ActionEvent t) -> {
chart.setData(PieChartApp.generateData());
});
setContextMenu(new ContextMenu(item1, item2, item3, item4));
getColumns().setAll(nameColumn, pieValueColumn);
}
}