JavaFX2.0 はSwing のように扱えるようになった。 また、JDK1.8 からはSwing同様に標準のコンポーネントとして使えるようなる。 !!!環境 *JavaFX SDKをダウンロードしてきて解凍。 *bin ディレクトリにパスを通す !!!サンプル {{code Java, import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.lang.reflect.InvocationTargetException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javafx.application.Application; import javafx.embed.swing.JFXPanel; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; import javafx.stage.Stage; /** * SwingとJavaFXの連携デモ * * SwingにJavaFXのシーングラフを貼る */ public class SwingJavaFXDemo extends Application { // シーングラフを貼るSwingコンポーネント private JFXPanel jfxPanel; // initSwingメソッドはSwingのスレッドで処理する public void initSwing() { JFrame frame = new JFrame("Swing-JavaFX Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 120); frame.setLayout(new GridLayout(2, 0)); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(280, 60)); panel.setLayout(new FlowLayout(FlowLayout.CENTER)); JLabel label = new JLabel("Swing: Label"); JTextField textField = new JTextField("Text Box"); JButton button = new JButton("Button"); panel.add(label); panel.add(textField); panel.add(button); frame.add(panel); // シーングラフを貼るコンポーネントを生成 jfxPanel = new JFXPanel(); jfxPanel.setPreferredSize(new Dimension(280, 60)); frame.add(jfxPanel); frame.setVisible(true); } // startメソッドはJavaFXのスレッドで処理する @Override public void start(Stage stage) { try { // Swingのスレッドで処理する SwingUtilities.invokeAndWait(new Runnable() { public void run() { initSwing(); } }); } catch (InvocationTargetException ex) { return; } catch (InterruptedException ex) { return; } FlowPane container = new FlowPane(10, 10); container.setAlignment(Pos.CENTER); Scene scene = new Scene(container); Label label = new Label("JavaFX: Label"); TextField TextField = new TextField("Text Box"); Button button = new Button("Button"); container.getChildren().addAll(label, TextField, button); // Swingにシーングラフを貼る jfxPanel.setScene(scene); } public static void main(String[] args) { // JavaFXのスレッドを起動 Application.launch(SwingJavaFXDemo.class, null); } } }} !!!通常のJavaアプリとして起動する JavaFXに関する操作は、JavaFXのスレッドから実行する必要がある。 {{code Java, import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.lang.reflect.InvocationTargetException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javafx.application.Application; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; import javafx.stage.Stage; /** * SwingとJavaFXの連携デモ * * SwingにJavaFXのシーングラフを貼る */ public class SwingJavaFXDemo extends Application { // シーングラフを貼るSwingコンポーネント private JFXPanel jfxPanel; // initSwingメソッドはSwingのスレッドで処理する public void initSwing() { JFrame frame = new JFrame("Swing-JavaFX Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 120); frame.setLayout(new GridLayout(2, 0)); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(280, 60)); panel.setLayout(new FlowLayout(FlowLayout.CENTER)); JLabel label = new JLabel("Swing: Label"); JTextField textField = new JTextField("Text Box"); JButton button = new JButton("Button"); panel.add(label); panel.add(textField); panel.add(button); frame.add(panel); // シーングラフを貼るコンポーネントを生成 jfxPanel = new JFXPanel(); jfxPanel.setPreferredSize(new Dimension(280, 60)); frame.add(jfxPanel); frame.setVisible(true); } // startメソッドはJavaFXのスレッドで処理する @Override public void start(Stage stage) { try { // Swingのスレッドで処理する SwingUtilities.invokeAndWait(new Runnable() { public void run() { initSwing(); } }); } catch (InvocationTargetException ex) { return; } catch (InterruptedException ex) { return; } javafx.application.Platform.runLater(new Runnable() { public void run(){ FlowPane container = new FlowPane(10, 10); container.setAlignment(Pos.CENTER); Scene scene = new Scene(container); Label label = new Label("JavaFX: Label"); TextField TextField = new TextField("Text Box"); Button button = new Button("Button"); container.getChildren().addAll(label, TextField, button); // Swingにシーングラフを貼る jfxPanel.setScene(scene); } }); } public static void main(String[] args) { // JavaFXのスレッドを起動 //Application.launch(SwingJavaFXDemo.class, null); new SwingJavaFXDemo().start(null); } } }} {{category2 プログラミング言語,JavaFX}}