[API Review] RT-27887: introduce a node to embed Swing into JavaFX
Anton V. Tarasov
anton.tarasov at oracle.com
Thu Jan 24 10:49:30 PST 2013
Hi All,
Please, review a request to add a new SwingNode class:
http://javafx-jira.kenai.com/browse/RT-27887
/**
* This class is used to embed a Swing content into a JavaFX application.
* The content to be displayed is specified with the {@link
#setContent} method
* that accepts an instance of Swing {@code JComponent}. The hierarchy
of components
* contained in the {@code JComponent} instance should not contain any
heavyweight
* components, otherwise {@code SwingNode} may fail to paint it. The
content gets
* repainted automatically. All the input and focus events are
forwarded to the
* {@code JComponent} instance transparently to the developer.
* <p>
* Here is a typical pattern which demonstrates how {@code SwingNode}
can be used:
* <pre>
* public class SwingFx extends Application {
*
* private SwingNode swingNode;
*
* @Override
* public void start(Stage stage) {
* swingNode = new SwingNode();
*
* createAndSetSwingContent();
*
* StackPane pane = new StackPane();
* pane.getChildren().add(swingNode);
*
* stage.setScene(new Scene(pane, 100, 50));
* stage.show();
* }
*
* private void createAndSetSwingContent() {
* SwingUtilities.invokeLater(new Runnable() {
* @Override
* public void run() {
* swingNode.setContent(new JButton("Click me!"));
* }
* });
* }
* }
* </pre>
*/
public class SwingNode extends Node {
/**
* Constructs a new instance of {@code SwingNode}.
*/
public SwingNode();
/**
* Attaches a {@code JComponent} instance to display in this {@code
SwingNode}.
* The method can be called either on the event dispatch thread or
the JavaFX
* application thread.
*
* @param content a component to display in this {@code SwingNode}
*
* @see java.awt.EventQueue#isDispatchThread()
* @see javafx.application.Platform#isFxApplicationThread()
*/
public void setContent(final JComponent content);
/**
* Returns the {@code JComponent} instance attached to this {@code
SwingNode}.
*
* @return the {@code JComponent} instance attached to this {@code
SwingNode}
*/
public JComponent getContent();
}
Additional question is about disposing. When SwingNode is removed from a
Scene its underlying
resources (on the AWT toolkit side) should be released. An option is to
add a "dispose" method to
the node and leave it to a user's discretion when to call it. However,
having this managed
automatically would be preferable. For that, a node should be able to be
notified when it is no
longer a part of a rendering process. This is an issue and it is tracked
separately as RT-129.
Thanks,
Anton.
More information about the openjfx-dev
mailing list