簡體   English   中英

如何將JButton嵌入JavaFX窗格

[英]How to embed JButton to JavaFX pane

我正在嘗試使用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);
    }    

}

Oracle文檔中有一個在JavaFX應用程序中嵌入Swing內容的示例,其中將Swing JButton添加到JavaFX窗格。 以下示例只是從那里進行的復制和粘貼(稍作更新以使用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工具包之間的線程規則未得到驗證,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM