我正在尝试使用我的JavaFX控制器类将JButton添加到特定窗格。 有人能告诉我我做错了吗
public class FXMLDocumentController implements Initializable {
@FXML private Pane pane;
private void createAndSetSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
swingNode.setContent(new JButton("Click me!"));
}
});
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
final SwingNode swingNode = new SwingNode();
createAndSetSwingContent(swingNode);
pane.getChildren().add(swingNode);
}
}
答案 0 :(得分:1)
在Embedding Swing Content in JavaFX Applications上的Oracle文档中,有一个将Swing JButton添加到JavaFX窗格的示例。以下示例只是从那里进行复制和粘贴(稍微更新以使用Java 8功能)。
import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
public class SwingFx extends Application {
@Override
public void start (Stage stage) {
final SwingNode swingNode = new SwingNode();
createSwingContent(swingNode);
StackPane pane = new StackPane();
pane.getChildren().add(swingNode);
stage.setTitle("Swing in JavaFX");
stage.setScene(new Scene(pane, 250, 150));
stage.show();
}
private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(() -> swingNode.setContent(new JButton("Click me!")));
}
}
当然这是一个玩具样本,大多数人只会使用JavaFX按钮。对于处理针对现有Swing库而不是单独按钮编写的大型现有代码库的更复杂示例,上述方法可能有意义,但仍可能存在诸如外观和感觉不一致以及其他复杂性等残留问题。确保不同的UI工具包之间的线程规则未经过验证等。