gpt4 book ai didi

java - 如何将 JButton 嵌入到 JavaFX Pane

转载 作者:行者123 更新时间:2023-12-01 10:21:36 24 4
gpt4 key购买 nike

我正在尝试使用 JavaFX Controller 类将 JButton 添加到特定 Pane 。谁能告诉我我做错了什么

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);
}

}

最佳答案

Oracle 文档 Embedding Swing Content in JavaFX Applications 中有一个将 Swing JButton 添加到 JavaFX Pane 的示例。 。以下示例只是从那里复制和粘贴的(稍作更新以使用 Java 8 功能)。

swinginfx

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 工具包之间的线程规则未经验证等。

关于java - 如何将 JButton 嵌入到 JavaFX Pane ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35562637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com