Cześć,
chciałbym osiągnąć następujący efekt, w aplikacji opartej na SWINGu wyświetlać wykresy z java FX zastosowałem JFXPanel, gdy uruchamiam klasę w NetBeans (run) wszystko dobrze działa, natomiast gdy wywołuje konstruktor w innej klasie otwiera się tylko JFrame bez wykresu pomijane jest Platform.runLater(new Runnable().
Wywołanie konstruktora:
Test test = new Test();
klasa z wykresem:
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Test extends JFrame {
JFXPanel panel;
Scene scene;
StackPane stack;
Text hello;
boolean wait = true;
public Test() {
final String austria = "Austria";
final String brazil = "Brazil";
final String france = "France";
final String italy = "Italy";
final String usa = "USA";
panel = new JFXPanel();
Platform.runLater(new Runnable() {
@Override
public void run() {
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final BarChart<String, Number> bc
= new BarChart<String, Number>(xAxis, yAxis);
bc.setTitle("Country Summary");
xAxis.setLabel("Country");
yAxis.setLabel("Value");
XYChart.Series series1 = new XYChart.Series();
series1.setName("2003");
series1.getData().add(new XYChart.Data(austria, 25601.34));
series1.getData().add(new XYChart.Data(brazil, 20148.82));
series1.getData().add(new XYChart.Data(france, 10000));
series1.getData().add(new XYChart.Data(italy, 35407.15));
series1.getData().add(new XYChart.Data(usa, 12000));
XYChart.Series series2 = new XYChart.Series();
series2.setName("2004");
series2.getData().add(new XYChart.Data(austria, 57401.85));
series2.getData().add(new XYChart.Data(brazil, 41941.19));
series2.getData().add(new XYChart.Data(france, 45263.37));
series2.getData().add(new XYChart.Data(italy, 117320.16));
series2.getData().add(new XYChart.Data(usa, 14845.27));
XYChart.Series series3 = new XYChart.Series();
series3.setName("2005");
series3.getData().add(new XYChart.Data(austria, 45000.65));
series3.getData().add(new XYChart.Data(brazil, 44835.76));
series3.getData().add(new XYChart.Data(france, 18722.18));
series3.getData().add(new XYChart.Data(italy, 17557.31));
series3.getData().add(new XYChart.Data(usa, 92633.68));
scene = new Scene(bc, 800, 600);
bc.getData().addAll(series1, series2, series3);
panel.setScene(scene);
panel.show();
wait = false;
}
});
// panel.setScene(scene);
this.setTitle("Wykres słupkowy");
this.getContentPane().add(panel);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(1200, 600);
this.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}