2017-10-19 120 views
0

我想在條形圖中顯示一些數據並使用JavaFx堆積條形圖。我使用4個系列,使用日食氧氣來填充數據。在一頁上使用類似數據的條形圖和堆積條形圖

我在條形圖中使用了series1和series2。 我使用堆疊條形圖中的series1,series2,series3和series4。

我已經使用JavaFx Scene Builder創建了我的屏幕。填充場景並顯示數據。我的問題是,我無法同時顯示兩個圖表。只有後者得到人口,取決於人口的秩序。我添加的額外位是圖形在鼠標輸入事件上展開,然後縮小到鼠標退出事件的原始尺寸。

任何人都可以通過指出我做錯了什麼來幫助我嗎? 我的代碼如下這裏

@FXML 
private void bcsbg_mouseentered() { 
    if (!clickEntered) { 
     clickEntered = true; 
     prefWidth = bcByGroup.getPrefWidth(); 
     prefHeight = bcByGroup.getPrefHeight(); 
     bcByGroup.setPrefSize(1500, 900); 
     gXAxis.setPrefHeight(Region.USE_COMPUTED_SIZE); 
     gXAxis.setPrefWidth(Region.USE_COMPUTED_SIZE); 
     gYAxis.setPrefHeight(Region.USE_COMPUTED_SIZE); 
     gYAxis.setPrefWidth(Region.USE_COMPUTED_SIZE); 
     gXAxis.setVisible(true); 
     gYAxis.setVisible(true); 
     gXAxis.setLabel("Value"); 
     gYAxis.setLabel("Question"); 
     gXAxis.setTickLabelsVisible(true); 
     gYAxis.setTickLabelsVisible(true); 
     gXAxis.setTickMarkVisible(true); 
     gYAxis.setTickMarkVisible(true); 

     sbcByAll.setVisible(false); 

    } else { 
     clickEntered = false; 
     bcByGroup.setPrefSize(prefWidth, prefHeight); 
     gXAxis.setPrefHeight(0); 
     gXAxis.setPrefWidth(0); 
     gYAxis.setPrefHeight(0); 
     gYAxis.setPrefWidth(0); 
     gXAxis.setVisible(false); 
     gYAxis.setVisible(false); 
     gXAxis.setLabel(""); 
     gYAxis.setLabel(""); 
     gXAxis.setTickLabelsVisible(false); 
     gYAxis.setTickLabelsVisible(false); 
     gXAxis.setTickMarkVisible(false); 
     gYAxis.setTickMarkVisible(false); 

     sbcByAll.setVisible(true); 
     sbcByAll.getData().clear(); 
     sbcByAll.getData().addAll(series1, series2, series3, series4); 

    } 

    bcByGroup.getData().clear(); 
    bcByGroup.getData().addAll(series1, series2); 

} 

回答

0

的問題是不是在你的代碼,但在路上圖表API被寫入。 (我不正常批評的語言或標準庫的粉絲,但是這部分API似乎是一個特別糟糕的宿醉寫的無人監督的實習生。)

XYChart.Data類保持了reference to the node顯示的數據。 (這顯然違反了MVC的最基本原則,並且使得數據分離成完全多餘的不同類。)

因此,如果您嘗試在兩個圖表中使用相同的數據,則同一節點會嘗試出現在兩個父母,這是不允許的,你只能在一個地方看到數據的可視化。不幸的是,你需要複製每個圖表的數據。

0

謝謝戴夫。你是對的。我沒有通過關於XYData.Chart的標準文檔來注意到這個對象將被附加到將要顯示數據的節點上。

我真的希望避免複製,但只要數據系列被複制並附加到不同的圖表,代碼就會工作。

如由Dave提到的,

的XYChart.Data類保留一個reference to the node,其中顯示數據。 (這顯然違反了MVC的最基本原則,並且使得數據分離成完全多餘的不同類別。)

請仔細閱讀Dave鏈接中提供的標準文檔。