И JFXPanel и FXCanvas позволяют устанавливать сцену JavaFX для их экземпляра. Экземпляр Scene (основанный на моем посте Simple JavaFX 2.0 Text Example ), который будет использоваться в моих примерах в этом посте, обеспечивается методом, показанным в следующем примере кода для JavaFX.
Метод предоставления сцены JavaFX для интеграции
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
package dustin.examples;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.effect.*;import javafx.scene.paint.Color;import javafx.scene.text.Font;import javafx.scene.text.FontWeight;import javafx.scene.text.Text;/** * Simple class intended to be used by two examples of integrating JavaFX with * Swing and with SWT. Provides single method {@code createScene()} to be used * by the classes that are examples of integrating Swing with JavaFX and SWT * with JavaFX. * * @author Dustin */public class TextIntegrationSceneCreator{ /** * Provides an instance of Scene with JavaFX text examples. * * @return Instance of Scene with text examples. */ public static Scene createTextScene() { final Group rootGroup = new Group(); final Scene scene = new Scene(rootGroup, 800, 400, Color.BEIGE); final Text text1 = new Text(25, 25, "(2007) JavaFX based on F3"); text1.setFill(Color.CHOCOLATE); text1.setFont(Font.font(java.awt.Font.SERIF, 25)); rootGroup.getChildren().add(text1); final Text text2 = new Text(25, 50, "(2010) JavaFX Script Deprecated"); text2.setFill(Color.DARKBLUE); text2.setFont(Font.font(java.awt.Font.SANS_SERIF, 30)); rootGroup.getChildren().add(text2); final Text text3 = new Text(25, 75, "(2011) JavaFX to be Open Sourced!"); text3.setFill(Color.TEAL); text3.setFont(Font.font(java.awt.Font.MONOSPACED, 35)); rootGroup.getChildren().add(text3); final Text text4 = new Text(25, 125, "(2011) JavaFX to be Standardized"); text4.setFill(Color.CRIMSON); text4.setFont(Font.font(java.awt.Font.DIALOG, 40)); final Effect glow = new Glow(1.0); text4.setEffect(glow); rootGroup.getChildren().add(text4); final Text text5 = new Text(25, 175, "(Now) Time for JavaFX 2.0!"); text5.setFill(Color.DARKVIOLET); text5.setFont(Font.font(java.awt.Font.SERIF, FontWeight.EXTRA_BOLD, 45)); final Light.Distant light = new Light.Distant(); light.setAzimuth(-135.0); final Lighting lighting = new Lighting(); lighting.setLight(light); lighting.setSurfaceScale(9.0); text5.setEffect(lighting); rootGroup.getChildren().add(text5); final Text text6 = new Text(25, 225, "JavaFX News at JavaOne!"); text6.setFill(Color.DARKGREEN); text6.setBlendMode(BlendMode.COLOR_BURN); text6.setFont(Font.font(java.awt.Font.DIALOG_INPUT, FontWeight.THIN, 45)); final Reflection reflection = new Reflection(); reflection.setFraction(1.0); text6.setEffect(reflection); rootGroup.getChildren().add(text6); return scene; }} |
Сцена JavaFX может быть интегрирована в код Swing через класс JavaFX JFXPanel и его метод setScene (Scene) . Это продемонстрировано в следующем листинге кода, который получает конкретный экземпляр Scene из метода в предыдущем листинге кода.
Интеграция JavaFX / Swing с JFXPanel
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
package dustin.examples;import javafx.application.Platform;import javafx.embed.swing.JFXPanel;import javafx.scene.Scene;import javax.swing.JFrame;import javax.swing.SwingUtilities;/** * Simple class demonstrating interoperability between Swing and JavaFX. This * class is adapted from the example provided in the Javadoc documentation for * {@code javafx.embed.swing.JFXPanel}. */public class SwingJavaFxInteroperabilityDemo{ private static void initAndShowGUI() { // This method is invoked on Swing thread final JFrame frame = new JFrame("JavaFX / Swing Integrated"); 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 final Scene scene = TextIntegrationSceneCreator.createTextScene(); fxPanel.setScene(scene); } public static void main(String[] arguments) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { initAndShowGUI(); } }); } } |
Результат запуска этого простого приложения Java Swing со встроенной Scene JavaFX показан ниже.
Интеграция SWT с JavaFX, возможно, еще проще и продемонстрирована в следующем листинге кода. Как и в примере интеграции Swing, основным подходом является вызов метода FXSanvas setScene (Scene) .
Интеграция JavaFX / SWT с FXCanvas
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package dustin.examples;import javafx.embed.swt.FXCanvas;import javafx.scene.Scene;import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;/** * Simple class demonstrating interoperability between SWT and JavaFX. This * class is based on the example provided in the Javadoc documentation for * {@code javafx.embed.swt.FXCanvas}. * * @author Dustin */public class SwtJavaFxInteroperabilityDemo{ public static void main(String[] arguments) { final Display display = new Display(); final Shell shell = new Shell(display); shell.setText("JavaFX / SWT Integration"); shell.setLayout(new FillLayout()); final FXCanvas canvas = new FXCanvas(shell, SWT.NONE); final Scene scene = TextIntegrationSceneCreator.createTextScene(); canvas.setScene(scene); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } } |
На следующем снимке экрана показано, как выглядит это простое приложение SWT со встроенным JavaFX.
Списки кода для интеграции Swing с JavaFX и для интеграции SWT с JavaFX, показанные выше, лишь слегка адаптированы из документации Javadoc для классов JavaFX JFXPanel (Swing) и FXCanvas (SWT). Приятно, что эти классы предоставляют эти примеры в своей документации, и очень приятно, что интеграция стала намного проще. Более подробное описание интеграции JavaFX / Swing см. В разделе « Интеграция JavaFX в приложения Swing» .
Ссылка: Интеграция JavaFX 2.0 с Swing и SWT от нашего партнера JCG Дастина Маркса в блоге Inspired by Actual Events
Статьи по Теме :

