首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFX 2.x :使用StackPane对更多不同类型的图表进行分层

JavaFX 2.x :使用StackPane对更多不同类型的图表进行分层
EN

Stack Overflow用户
提问于 2012-09-05 19:39:45
回答 1查看 2.2K关注 0票数 1

有了这个建议,

https://forums.oracle.com/forums/thread.jspa?threadID=2435573&tstart=0

我曾尝试使用StackPane,但第二个图表替换了第一个图表。

如何在同一张图中绘制两个或多个不同的图表(如我的示例)?

以下是我的代码

代码语言:javascript
复制
public class XyChartInSplitStackpane extends Application {
SplitPane               splitPane1 = null;
@Override
public void start(Stage stage) {
stage.setTitle("Line plot");

final CategoryAxis xAxis1 = new CategoryAxis();
final NumberAxis yAxis1 = new NumberAxis();

yAxis1.setTickUnit(1);
yAxis1.setPrefWidth(35);
yAxis1.setMinorTickCount(10);

yAxis1.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis1){
    @Override
public String toString(Number object){
        String label;
        label = String.format("%7.2f", object.floatValue());
        return label;
}
});
final BarChart<String, Number>barChart1 = new BarChart<String, Number>(xAxis1, yAxis1);

barChart1.setAlternativeRowFillVisible(false);
barChart1.setLegendVisible(false);
barChart1.setAnimated(false);

XYChart.Series series1 = new XYChart.Series();

series1.getData().add(new XYChart.Data("Jan", 1));
series1.getData().add(new XYChart.Data("Feb", 2));
series1.getData().add(new XYChart.Data("Mar", 1.5));
series1.getData().add(new XYChart.Data("Apr", 3));
series1.getData().add(new XYChart.Data("May", 2.5));
series1.getData().add(new XYChart.Data("Jun", 5));
series1.getData().add(new XYChart.Data("Jul", 4));
series1.getData().add(new XYChart.Data("Aug", 8));
series1.getData().add(new XYChart.Data("Sep", 6.5));
series1.getData().add(new XYChart.Data("Oct", 13));
series1.getData().add(new XYChart.Data("Nov", 10));
series1.getData().add(new XYChart.Data("Dec", 20));

barChart1.getData().addAll(series1); 

final CategoryAxis xAxis2 = new CategoryAxis();
final NumberAxis yAxis2 = new NumberAxis(1, 21,0.1);

yAxis2.setTickUnit(1);
yAxis2.setPrefWidth(35);
yAxis2.setMinorTickCount(10);

yAxis2.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis2){
    @Override
public String toString(Number object){
        String label;
        label = String.format("%7.2f", object.floatValue());
        return label;
}
});
final LineChart<String, Number>lineChart2 = new LineChart<String, Number>(xAxis2,  yAxis2);

lineChart2.setCreateSymbols(false);
lineChart2.setAlternativeRowFillVisible(false);
lineChart2.setLegendVisible(false);
lineChart2.setAnimated(false);

XYChart.Series series2 = new XYChart.Series();

series2.getData().add(new XYChart.Data("Jan", 2));
series2.getData().add(new XYChart.Data("Feb", 10));
series2.getData().add(new XYChart.Data("Mar", 8));
series2.getData().add(new XYChart.Data("Apr", 4));
series2.getData().add(new XYChart.Data("May", 7));
series2.getData().add(new XYChart.Data("Jun", 5));
series2.getData().add(new XYChart.Data("Jul", 4));
series2.getData().add(new XYChart.Data("Aug", 8));
series2.getData().add(new XYChart.Data("Sep", 16.5));
series2.getData().add(new XYChart.Data("Oct", 13.9));
series2.getData().add(new XYChart.Data("Nov", 17));
series2.getData().add(new XYChart.Data("Dec", 10));

Set<Node> nodes1 = barChart1.lookupAll(".series0");    
for (Node n: nodes1) {        
    n.setStyle("-fx-blend-mode:  src-over");        
}

lineChart2.getData().addAll(series2);
Set<Node> nodes2 = lineChart2.lookupAll(".series0");    
for (Node n: nodes2) {        
    n.setStyle("-fx-stroke: red; -fx-background-color: red, white; -fx-blend-mode: src-over; -fx-opacity: 0.5");
}    

splitPane1 = new SplitPane();   
StackPane stackpane = new StackPane();
stackpane.getChildren().add(barChart1);                
stackpane.getChildren().add(lineChart2);

splitPane1.setOrientation(Orientation.VERTICAL);
splitPane1.getItems().addAll(stackpane);    
splitPane1.setDividerPosition(0, 1);

Scene scene = new Scene(splitPane1, 800, 600);

stage.setScene(scene);
stage.show();
}

 public static void main(String[] args) {
launch(args);
}
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-05 12:03:13

据我所知,您可以将series添加到两个不同的图表中

即。lineChart2.getData().addAll(series2);barChart1.getData().addAll(series1);

但是,如果这是有意的,那么将其他数据添加到其中一个图表中所需做的就是简单地使用:barChart1.getData().addAll(series1, series2);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12280614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档