Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
416 views
in Technique[技术] by (71.8m points)

java - how to put JavaFX in JPanel?

I have a swing program and i am trying to incorporate a JavaFX bar graph in my program.

How can I put it in a JPanel?

or

Is there a way to put this code in a ActionListerner? So I can run it after pressing a button.

public static void start(Stage stage) {
    String judge1 = "Judge 1";
    String judge2 = "Judge 2";
    String judge3 = "Judge 3";

    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();
    final BarChart<String,Number> bc = 
        new BarChart<String,Number>(xAxis,yAxis);

    xAxis.setLabel("Judges");       
    yAxis.setLabel("Run");

    XYChart.Series series1 = new XYChart.Series();
    series1.setName("Run 1");       
    series1.getData().add(new XYChart.Data(judge1, 1));
    series1.getData().add(new XYChart.Data(judge2, 3));
    series1.getData().add(new XYChart.Data(judge3, 2));

    XYChart.Series series2 = new XYChart.Series();
    series2.setName("Run 2");
    series2.getData().add(new XYChart.Data(judge1, 5));
    series2.getData().add(new XYChart.Data(judge2, 4);
    series2.getData().add(new XYChart.Data(judge3, 4));

    Scene scene  = new Scene(bc,800,600);
    bc.getData().addAll(series1, series2);
    stage.setScene(scene);
    stage.show();
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use a JFXPanel.

From the documentation =>

public class Test {
   private static void initAndShowGUI() {
       // This method is invoked on Swing thread
       JFrame frame = new JFrame("FX");
       final JFXPanel fxPanel = new JFXPanel();
       frame.add(fxPanel);
       frame.setVisible(true);

       Platform.runLater(new Runnable() {
           @Override
           public void run() {
               initFX(fxPanel);
           }
       });
   }

   private static void initFX(JFXPanel fxPanel) {
       // This method is invoked on JavaFX thread
       Scene scene = createScene();
       fxPanel.setScene(scene);
   }

   public static void main(String[] args) {
       SwingUtilities.invokeLater(new Runnable() {
           @Override
           public void run() {
               initAndShowGUI();
           }
       });
   }
}

Oracle even have a tutorial on exactly the case you are asking:

barchart in swing

In general, I'd advise just using JavaFX only (or Swing only) and not mixing JavaFX and Swing unless you have really good reasons to do so.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...