這個答案討論圖表集成在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應用程序。
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,無需爲此類圖表使用外部庫。
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 Chart從Oracle's Ensemble Sample Application演示瞭如何使用JavaFX的構建candlestick chart。儘管error bars來自燭臺不同,我想自定義錯誤條形圖的實施將使用現有的JavaFX的圖表庫是完全可能的,代碼最終會在許多方面給樂團陰陽燭圖樣本相似。
但肯定的是,點仍然是有效的,目前的一些東西,如誤差線將是更容易實現利用成熟的庫,如JFreeChart的。
正如亞歷山大指出的那樣,如果標準JavaFX圖表框架中缺少必要的功能,看起來它可能適用於廣泛的用戶,那麼最好是file a feature request將功能嵌入標準庫。雖然某些類型的高級圖表功能可能最好由JavaFX圖表的第三方擴展庫處理(其中目前沒有我知道的)。
在該技術基於JFreeChart的? AWT?搖擺? –