2011-07-15 7 views
0

JFXPanelをJFrameに追加しようとしています。私はNetbeansとNetbeansのSwing GUI Builderを使用しています。私はそれを実行すると、私はエラーが発生しないとJFrameが正常に作成されますが、テキストを含むJFXPanelが表示されません。ここでJFrameをJFrameに追加する。それはなぜ機能しないのですか?

は私のコードです:

public class TestingFX { 

    private static void initJFrame() { 

    NewJFrame frame = new NewJFrame(); 
    final JFXPanel fxPanel = new JFXPanel(); 
    frame.add(fxPanel); 
    frame.setVisible(true); 

    Platform.runLater(new Runnable() { 

     @Override 
     public void run() { 
      fxPanel.setScene(createScene()); 
     } 
    }); 
    } 

    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      initJFrame(); 
     } 
    }); 
    } 

    public static Scene createScene() { 
    Text text = new Text("Hello World"); 
    text.setFont(new Font(24)); 
    text.setEffect(new Reflection()); 

    BorderPane pane = new BorderPane(); 
    pane.setCenter(text); 
    Scene scene = new Scene(pane); 

    return scene; 
    } 
} 

は、なぜそれが機能していませんか?私は何か間違っているのですか?

+0

私はJavaFXを一度も使ったことはありませんが、JavaFXとSwingを混ぜ合わせることで、常にマイナスの結果を聞いてきました.Thisフォーラム、NetBeansフォーラムで検索します。 – mKorbel

+0

@Dorothy、 – Moonbeam

+1

@ムーンビームはい。私はちょうどあなたのコードを実装し、それは働いた。次に、JFrameをJFrame(NewJFrame)に置き換え、outerFX.JPANelsカスタムコードに 'outerFX.add(javafxPanel、BorderLayout.CENTER);と' Application.launch(Demo.class、null); 'を追加しました。いくつかのデバッグの後、私は正しい順序でそれを取得し、それは働いた。ありがとう! – Dorothy

答えて

3

おそらくIntegrating JavaFX into Swing Applicationsを読み、それに応じてコードをリファクタリングする必要があります。


シーンを作成する場合は

public class Demo extends Application{ 
    private static JFXPanel javafxPanel; 

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

    public static void initAndShowGUI() { 
     JFrame frame = new JFrame("Swing application"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // Create JavaFX panel. 
     javafxPanel = new JFXPanel(); 
     frame.getContentPane().add(javafxPanel, BorderLayout.CENTER); 

     // Create JavaFX scene. 
     Application.launch (Demo.class, null); 

     // Show frame. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    @Override 
    public void start (Stage mainStage) { 
     // Add scene to panel 
     javafxPanel.setScene(createScene()); 
    } 

    private static Scene createScene() { 
     Text text = new Text("Hello World"); 
     text.setFont(new Font(24)); 
     text.setEffect(new Reflection()); 

     BorderPane pane = new BorderPane(); 
     pane.setCenter(text); 
     Scene scene = new Scene(pane); 

     return scene; 
    } 
} 

を試してみて、この例では、あなたが含まれたコードが有効であることを前提としています。

関連する問題