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等)集成?
本答案讨论了JavaFX中图表集成的几种不同方法。
使用FXGraphics2D桥绘制JFreeChart
David Gilbert(JFreeChart创建者)创建了一个桥,允许使用JavaFX原语绘制JFreeChart。该项目是FXGraphics2D:
FXGraphics2D现在直接集成在JFreeChart中(版本1.0.18),所以现在包含了JavaFX支持(需要JDK/JRE1.8)。
在JavaFX中嵌入JFreeChart的解决方案
使用Java8中的SwingNode在JavaFX应用程序中嵌入基于Swing的内容,如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图表进行简单的复制,从而无需使用外部库来生成此类图表。
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的功能比较
要是支持错误条就好了。没有它们,图表框架对科学应用程序的价值就小得多。
我的应用程序中有SplitPane。这是SplitPane具有默认宽度的分隔符。如何设置SplitPane分隔符的宽度
问题内容: JavaFX2的TableView具有“用户在运行时重新排序列”的功能。我想为我的应用程序中的一个特定表禁用此功能。 查看API文档,没有明显的API挂钩。但是,有-property。根据文档,它代表 属于此TableView的TableColumns。当用户重新排序TableView列时,此列表将更新以反映当前的视觉顺序。 希望我至少能够在发生更改后重置更改,所以我尝试添加一个侦听器
问题内容: 我有一个TextField可以输入搜索词,还有一个“ Go”按钮。但是在JavaFX2中,我如何做到这一点,以便在TextField中按Enter键可以执行操作? 谢谢 :) 问题答案: 您可以使用TextField的onAction属性并将其绑定到控制器中的方法。 在您的FXML文件中:
我必须找到新的Java桌面应用程序的技术。我不想使用swing,但我找不到好的和透视图的替代方案。我了解JavaFX,但我有很强的要求:它必须看起来很好,而不是在linux、windows和Macox上。JavaFX在每个平台上都能正常工作吗?我在使用JavaFX时会发现哪些大麻烦?
希望我能把问题弄得尽可能清楚。我正在使用JavaFX库为GUI开发一个小型java应用程序。我正在做一个POP连接,并将消息存储为ObservableList。为此,我使用javax.mail。我将这个observablelist传递给一个tableview,并通过以下方式将所需的值传递给TableColumns: Subject和sentDate是完美的读入。但不幸的是,“from”将对象引用添
null