2013-05-22 68 views
3

對於JavaFX2應用我必須表現出不同類型的Charts.I的正在使用的JFreeChart下面給出的圖表創建和代碼:我如何使用JFreeChart的與Javafx2

public static JFreeChart generatePieChart() { 
     DefaultPieDataset dataSet = new DefaultPieDataset(); 
     dataSet.setValue("China", 25); 
     dataSet.setValue("India", 25); 
     dataSet.setValue("United States", 50); 
     JFreeChart chart = ChartFactory.createPieChart(
       "World Population by countries", dataSet, true, true, false); 

     return chart; 
    } 

這將返回我的圖表對象。我如何將它與我的JavaFx節點(如HBox等)進行整合?

+0

在該技術基於JFreeChart的? AWT?搖擺? –

回答

2

JFreeChart是面向Swing的 - 雖然JFreeChart類本身不是Swing組件,但它通常顯示在org.jfree.chart.ChartPanel上,它是javax.swing.JPanel的子類。它使用ava.awt.Graphics2D對象來繪製自己。

我想你可以使用JFreeChart的createBufferedImage()方法來獲得一個BufferedImage,然後使用SwingFXUtils將它轉換爲javafx.scene.image.WritableImage,但是那樣你會失去圖表。

不幸的是,在目前,似乎沒有被任何方式的JavaFX

+0

對於JFreeChart的JavaFX中,我會建議使用我發佈到GitHub上的新FXGraphics2D實現:https://github.com/jfree/fxgraphics2d –

+4

FXGraphics2D現在直接在集成的JFreeChart(在1.0.18版本),所以JavaFX的支持現在包括(需要JDK/JRE 1.8)。 –

19

這個答案討論圖表集成在JavaFX的幾個不同的方法來嵌入Swing組件。

使用FXGraphics2D橋畫的JFreeChart

大衛·吉爾伯特(JFreeChart的創建者)創建了一個橋樑,它允許顯示JFreeChart來使用JavaFX元塗漆。該項目是FXGraphics2D:

FXGraphics2D是針對JavaFX畫布的Graphics2D API的免費實現。該代碼是爲使用Orson Charts和JFreeChart而開發的,但對於任何使用Graphics2D API的代碼來說都將非常有用。

FXGraphics2D需要JDK 1.8.0或更高版本,並且根據(三個條款)BSD樣式許可證授權。

有關更多信息,請參閱FXGraphics2D網站和對Interoperability between Graphics2D and GraphicsContext的回答。

大衛注意到在另一個答案評論:

FXGraphics2D現在在JFreeChart的直接集成(在1.0.18版本),因此JavaFX支持現在包括(需要JDK/JRE 1.8)。

解決方案嵌入的JFreeChart JavaFX中

Java 8使用SwingNode嵌入基於Swing的內容,如JFreeChart在JavaFX應用程序。

jfreechart

import javafx.application.Application; 
import javafx.embed.swing.SwingNode; 
import javafx.scene.*; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
import org.jfree.chart.*; 
import org.jfree.data.general.DefaultPieDataset; 

public class JFreeChartSwingNodePopulationPieChart extends Application { 
    @Override public void start(Stage stage) { 
    final SwingNode chartSwingNode = new SwingNode(); 

    chartSwingNode.setContent(
     new ChartPanel(
     generatePieChart() 
    )  
    ); 

    stage.setScene(
     new Scene(
     new StackPane( 
      chartSwingNode 
     )  
    ) 
    ); 

    stage.show(); 
    } 

    private JFreeChart generatePieChart() { 
    DefaultPieDataset dataSet = new DefaultPieDataset(); 
    dataSet.setValue("China",  1344.0); 
    dataSet.setValue("India",  1241.0); 
    dataSet.setValue("United States", 310.5); 

    return ChartFactory.createPieChart(
     "Population 2011", dataSet, true, true, false 
    ); 
    } 

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

替代的解決方案使用JavaFX圖表

使用JavaFX的自己charting framework

JavaFX的圖表沒有覆蓋完全一樣的功能JFreeChart,但非常適合許多應用。

在問題中發佈的默認餅圖代碼可以使用JavaFX圖表簡化爲replicated in JavaFX,無需爲此類圖表使用外部庫。

populationpiejavafx

import javafx.application.Application; 
import javafx.collections.*; 
import javafx.scene.*; 
import javafx.scene.chart.*; 
import javafx.stage.Stage; 

public class JavaFXPopulationPieChart extends Application { 
    @Override public void start(Stage stage) { 
    final PieChart chart = new PieChart(
     FXCollections.observableArrayList(
     new PieChart.Data("China",   1344.0), 
     new PieChart.Data("India",   1241.0), 
     new PieChart.Data("United States", 310.5) 
    )  
    ); 
    chart.setTitle("Population 2011"); 

    stage.setScene(new Scene(chart)); 
    stage.show(); 
    } 

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

在JavaFX和JFreeChart的功能比較

要是有錯誤條支持。沒有它們,圖表框架對科學應用程序的價值就會小得多。

JavaFX Advanced Candlestick ChartOracle's Ensemble Sample Application演示瞭如何使用JavaFX的構建candlestick chart。儘管error bars來自燭臺不同,我想自定義錯誤條形圖的實施將使用現有的JavaFX的圖表庫是完全可能的,代碼最終會在許多方面給樂團陰陽燭圖樣本相似。

但肯定的是,點仍然是有效的,目前的一些東西,如誤差線將是更容易實現利用成熟的庫,如JFreeChart的。

正如亞歷山大指出的那樣,如果標準JavaFX圖表框架中缺少必要的功能,看起來它可能適用於廣泛的用戶,那麼最好是file a feature request將功能嵌入標準庫。雖然某些類型的高級圖表功能可能最好由JavaFX圖表的第三方擴展庫處理(其中目前沒有我知道的)。

+2

如果只有支持錯誤欄。沒有它們,圖表框架對科學應用程序的價值就會小得多。 – scottb

+0

@scottb您可以提交關於錯誤欄的RFE(如果它們尚不存在)。 –

+0

@jewelse ... Thanx :) –

7

現在可以使用FXGraphics2D(JavaFX的Graphics2D API的免費實現)在JavaFX Canvas上顯示JFreeChart實例。

+3

現在JFreeChart 1.0.18中提供了JavaFX支持。 –