В этом ответе обсуждается несколько различных подходов к интеграции диаграмм в JavaFX.
Использование моста FXGraphics2D для рисования JFreeChart
Дэвид Гилберт (создатель JFreeChart) создал мост, который позволяет рисовать JFreeChart с использованием примитивов JavaFX. Проект FXGraphics2D:
FXGraphics2D — это бесплатная реализация Graphics2D API, предназначенная для холста JavaFX. Код был разработан для использования Orson Charts и JFreeChart, но в целом будет полезен для любого кода, использующего Graphics2D API.
FXGraphics2D требует JDK 1.8.0 или более поздней версии и лицензируется в соответствии с условиями лицензии (три пункта) в стиле BSD.
См. сайт FXGraphics2D и ответ на Взаимодействие между Graphics2D и GraphicsContext для получения дополнительной информации.
Дэвид отмечает в комментарии к другому ответу:
FXGraphics2D теперь интегрирован непосредственно в JFreeChart (в версии 1.0.18), поэтому теперь включена поддержка JavaFX (требуется JDK/JRE 1.8).
Решение по внедрению JFreeChart в JavaFX
Используйте SwingNode из Java 8 для встраивания контента на основе 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.
Диаграммы JavaFX не обладают точно такой же функциональностью, как JFreeChart, но отлично подходят для многих приложений.
Код круговой диаграммы по умолчанию, опубликованный в вопросе, может быть тривиально реплицирован в JavaFX. с помощью диаграмм 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 из примера Oracle Ensemble демонстрирует, как использовать JavaFX для построения свечного графика. Несмотря на то, что столбики погрешностей отличаются от свечей, я думаю, что реализация собственного гистограммы погрешностей будет вполне возможно, используя существующую библиотеку графиков JavaFX, и код в конечном итоге во многом будет похож на пример свечного графика Ensemble.
Но, конечно, точка зрения по-прежнему актуальна, некоторые вещи, такие как планки погрешностей, в настоящее время будет проще реализовать с помощью зрелой библиотеки, такой как JFreeChart.
Как указывает Александр, если в стандартной структуре построения диаграмм JavaFX отсутствуют необходимые функции, которые, похоже, будут применимы для широкого круга пользователей, то лучше отправьте запрос на функцию, чтобы получить функциональность, встроенную в стандартную библиотеку. Хотя некоторые виды расширенных функций диаграмм, вероятно, лучше всего обрабатываются сторонней библиотекой расширений для построения диаграмм JavaFX (из которых в настоящее время нет доступных, о которых я знаю).
person
jewelsea
schedule
22.05.2013