- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我正在使用 JavaFX 图表,但我需要为每种图表类型创建一个通用类。例如,我需要创建一个 ScatterChart,我可以从此类创建一个带有 X = 数字和 Y= 数字轴、X = 字符串和 Y = 数字轴、X = 数字和 Y = 字符串轴或 X = 字符串和Y = String,但我发现在使用图表之前必须定义图表的类型,并且不可能更改同一图表中的轴类型。
我试图做到这一点,但操作数据的方法不起作用:
public class JFXPanelScatterChartNS extends JFXPanel....
.....
private ScatterChart chart;
.......
public JFXPanelScatterChartNS(String[] xAxisCategories, String[] yAxisCategories ){
if(xAxisCategories != null && yAxisCategories != null){
xAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(xAxisCategories)));
yAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(yAxisCategories)));
chart = new ScatterChart<String, String>(xAxisCategory, yAxisCategory);
}else if(xAxisCategories != null){
xAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(xAxisCategories)));
yAxis = new NumberAxis(0.0,10.0,1.0);
chart = new ScatterChart<String, Number>(xAxisCategory, yAxis);
}else if(yAxisCategories != null){
xAxis = new NumberAxis(0.0,10.0,1.0);
yAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(yAxisCategories)));
chart = new ScatterChart<Number, String>(xAxis, yAxisCategory);
}else{
xAxis = new NumberAxis(0.0,10.0,1.0);
yAxis = new NumberAxis(0.0,10.0,1.0);
chart = new ScatterChart<Number, Number>(xAxis, yAxisCategory);
}
Platform.runLater(() -> {
createScene(withDragAndDrop);
});
}
感谢您的帮助!!
现在我如何使用操作同一类中的数据的方法?在下面的示例中,ScatterChar 仅适用于 X 轴 = Number 和 Y 轴 = String。
我目前的方法是:
public void addSeries(String idSeries, String nameSeries, final Number xIni, final String yIni){
final XYChart.Series<Number,String> newSeries;
//Valido si el Id ya existe
final boolean seriesExist = seriesMap.containsKey(idSeries);
//si no existe el ID entonces creo la nueva serie
if(!seriesExist){
newSeries = new XYChart.Series<>();
ObservableList<XYChart.Data<Number, String>> listaSerie;
listaSerie = FXCollections.synchronizedObservableList(FXCollections.observableList(new ArrayList<XYChart.Data<Number, String>>()));
newSeries.setData(listaSerie);
newSeries.setName(nameSeries);
newSeries.getData().add(new XYChart.Data<>(xIni,yIni));
Platform.runLater(() -> {
//Genero el index para la nueva serie
Integer newIndex = new Integer(chart.getData().size());
chart.getData().add(newIndex.intValue(), newSeries);
seriesMap.put(idSeries, newIndex);
});
}
}
public void setData(final String idSeries, final int index, final Number x, final String y){
//valido que exista la serie
boolean seriesExist = seriesMap.containsKey(idSeries);
//obtengo el index de la serie, como fue almacenada en la grafica
Integer indexSerie = seriesMap.get(idSeries);
if(seriesExist){
Platform.runLater(() -> {
XYChart.Series<Number,String> currentSeries = null;
currentSeries = chart.getData().get(indexSerie.intValue());
currentSeries.getData().set(index,new XYChart.Data<>(x,y));
});
}
}
最佳答案
考虑使用工厂方法而不是 public
构造函数,并泛化您拥有的方法:
import java.util.Arrays;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.embed.swing.JFXPanel;
import javafx.scene.chart.Axis;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
public class JFXPanelScatterChartNS<X,Y> extends JFXPanel {
private ScatterChart<X,Y> chart ;
private boolean withDragAndDrop = false ;
private JFXPanelScatterChartNS(Axis<X> xAxis, Axis<Y> yAxis) {
chart = new ScatterChart<>(xAxis, yAxis);
Platform.runLater(() -> createScene(withDragAndDrop));
}
private void createScene(boolean withDragAndDrop) {
// ...
}
public static JFXPanelScatterChartNS<String, String> createStringInstance(String[] xAxisCategories, String[] yAxisCategories) {
Axis<String> xAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(xAxisCategories)));
Axis<String> yAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(yAxisCategories)));
return new JFXPanelScatterChartNS<>(xAxisCategory, yAxisCategory);
}
public static JFXPanelScatterChartNS<String, Number> createStringNumberInstance(String[] xAxisCategories) {
Axis<String> xAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(xAxisCategories)));
return new JFXPanelScatterChartNS<String, Number>(xAxisCategory, new NumberAxis(0.0,10.0,1.0));
}
public static JFXPanelScatterChartNS<Number, String> createNumberStringInstance(String[] yAxisCategories) {
Axis<String> yAxisCategory = new CategoryAxis(FXCollections.observableList(Arrays.asList(yAxisCategories)));
return new JFXPanelScatterChartNS<Number, String>(new NumberAxis(0.0,10.0,1.0), yAxisCategory);
}
public static JFXPanelScatterChartNS<Number, Number> createNumberInstance() {
return new JFXPanelScatterChartNS<Number, Number>(new NumberAxis(0.0,10.0,1.0), new NumberAxis(0.0,10.0,1.0));
}
public void addSeries(String idSeries, String nameSeries, final X xIni, final Y yIni){
final XYChart.Series<X,Y> newSeries;
//Valido si el Id ya existe
final boolean seriesExist = seriesMap.containsKey(idSeries);
//si no existe el ID entonces creo la nueva serie
if(!seriesExist){
newSeries = new XYChart.Series<>();
ObservableList<XYChart.Data<X, Y>> listaSerie;
listaSerie = FXCollections.synchronizedObservableList(FXCollections.observableList(new ArrayList<XYChart.Data<X, Y>>()));
newSeries.setData(listaSerie);
newSeries.setName(nameSeries);
newSeries.getData().add(new XYChart.Data<>(xIni,yIni));
Platform.runLater(() -> {
//Genero el index para la nueva serie
Integer newIndex = new Integer(chart.getData().size());
chart.getData().add(newIndex.intValue(), newSeries);
seriesMap.put(idSeries, newIndex);
});
}
}
public void setData(final String idSeries, final int index, final X x, final Y y){
//valido que exista la serie
boolean seriesExist = seriesMap.containsKey(idSeries);
//obtengo el index de la serie, como fue almacenada en la grafica
Integer indexSerie = seriesMap.get(idSeries);
if(seriesExist){
Platform.runLater(() -> {
XYChart.Series<X,Y> currentSeries = null;
currentSeries = chart.getData().get(indexSerie.intValue());
currentSeries.getData().set(index,new XYChart.Data<>(x,y));
});
}
}
}
现在您可以编写如下代码:
JFXPanelScatterChartNS<Number, String> chart =
JFXPanelScatterChartNS.createNumberStringInstance(new String[] {"A", "B", "C"});
chart.addSeries("Series1", "Series 1", 1, "A");
JFXPanelScatterChartNS<Number, Number> numberChart =
JFXPanelScatterChartNS.createNumberInstance();
numberChart.addSeries("Series2", "Series 2", 5, 3);
关于java - 如何创建带有数字轴或字符串轴的通用 JavaFX XYChart?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29462718/
是否可以制作隐藏轴的 XYChart?理想情况下删除。 从源代码来看,它似乎必须有一个,因为 XYChart 在调用 layoutChartChildren() 时不会检查 null Axis,这是一
现在我正在使用 JavaFX 图表,但我需要为每种图表类型创建一个通用类。例如,我需要创建一个 ScatterChart,我可以从此类创建一个带有 X = 数字和 Y= 数字轴、X = 字符串和 Y
您好,我已将数据添加到 XYSeries 中,并尝试将数据从最短长度到最大长度排序。我不知道如何操作这些数据,任何人都可以帮助我。这是我的代码: xLabel = "Link I
从这个问题开始JavaFX LineChart Hover Values我在第一个答案中修改了 Gist https://gist.github.com/jewelsea/4681797进入这个 pu
我正在尝试设置我的 JavaFX 面积图的样式,但找不到任何方法来为特定系列设置颜色。我知道,我可以通过 CSS 设置样式,但我也想在代码中这样做。 我该怎么做?1.) 如何使用内联样式为 Area-
我有两个图表绘制在同一个堆栈 Pane 上。 它们有共同的 x 轴和 y 轴,我想让它们可滚动。 这是我编码的内容: import javafx.application.Application; im
所以我想生成随机的JavaFX XYcharts,例如散点图。我使用的是netbeans 7.4。 我想随机化输入的数据,并且我也想随机化系列的数量。我已经添加了随机数据,但我不知道如何随机化所使用的
我在线性布局中使用 AChartEngine 绘制图表。我有图表的边距 mRenderer.setMargins(new int[] {20, 50, 20, 20}); 问题是当我缩放图
大家好,我遇到了这个问题: XYChart.Series x = (XYChart.Series)((XYChart.Series)item).clone(); 错误:clone() 已在 java.
我正在尝试在 JavaFX 中使用 XYChart 在 X 轴上显示日期。 @FXML private LineChart grafico; @FXML private NumberAxis eixo
我试图在计时器方法中强制更新自定义 XYChart,但似乎唯一有效的方法是调整窗口大小。 import javafx.application.Application; import javafx.ap
我在更新图表时遇到一些问题 我有类(class)图表 public class Chart { public LineChart createChart() { // defi
我一直在尝试使用 XYCharts 做一些工作,特别是在它们上面或周围放置东西。我一直需要使用与整个图表定义的坐标空间相关的轴边界框的坐标。但是,我意识到 .getBoundsInParent() 方
我有一个 XYChart 将数据绘制为 Y 轴上的线性步长,我想绘制为对数或半对数 Y 刻度,如何更改我的以下代码? public class BaseXYChart extends Applicat
我试图用 javascript 更新我的 am4charts.XYChart 的数据,但我不能 我尝试再次执行 am4core.create("chartdiv", am4charts.XYChart
我想要一个交互式折线图,允许我移动和设置图表上点的基础值。将鼠标事件 ondragged 处理程序添加到 XYChart.Data 点的节点应该允许我这样做,但我需要能够将鼠标事件位置转换为该点的轴参
大家好,我正在使用 am4charts.XYChart 来显示两个不同 vendor 的价格 图形工作正常,只有当我们将光标悬停在图形中的点上时,每个点的工具提示才可见,但是我的要求是图形中所有点的工
我尝试获取 XYChart.Data 的节点,但它为空。 var a = new XYChart.Data(10, 10); if(a.getNode()==null){ System.out.pri
我在 XYChart 绘图时遇到了缩放问题:我的数据系列的浮点值范围为 0.4 和 0.5,当在场景上绘图时,我得到的最小 Y 值是 1,所以我看不到任何绘图。 如果我使用具有更高值(例如 > 100
我有这个代码来对 XYChart LineChart 执行缩放 public class Zoom extends Application { BorderPane pane; Rectangle
我是一名优秀的程序员,十分优秀!