Chciałem pobawić się SwingNode
w JavaFX i z tej okazji stwierdziłem, że zrobię odpowiednik swingowego JDesktopPane.
Dla testu skopiowałem kod z tutoriala Oracla, wszystko działało ok, przycisk się wyświetlał. Co ciekawe, nie od razu - aby w ogóle się pokazał, musiałem najpierw najechać myszką na miejsce, w którym się znajdował.
Później chciałem sprawdzić, czy Swingowe LookAndFeel również działają. Dodanie UIManager.setLookAndFeel(new NimbusLookAndFeel());
faktycznie zmieniło mi LAF na Nimbusa, a więc działa.
Później dodałem JDesktopPane w miejscu JButton i nic się nie wyświetliło, podczas gdy domyślnie w JDesktopPane pojawia się niebieskie tło. Najechanie kursorem na miejsce, w którym powinno pojawić się JDesktopPane - lewy górny róg, jak wynika z obserwacji z przyciskiem - nic nie dało. Stwierdziłem, że może to wina tego, że domyślne JDesktopPane ma rozmiar zero (?), więc ustawiłem mu rozmiar na 500x500, a nawet dodałem JInternalPane do środka. Nic to nie dało.
Ma ktoś jakiś pomysł?
Niżej załączam cały, kompletny kod programu.
public class Start extends Application {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(new NimbusLookAndFeel());
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
final SwingNode swingNode = new SwingNode();
createSwingContent(swingNode);
VBox box = new VBox();
box.getChildren().addAll(swingNode);
primaryStage.setScene(new Scene(box));
primaryStage.setTitle("Tester");
primaryStage.show();
}
private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(() -> {
JDesktopPane jdp = new JDesktopPane();
JInternalFrame frame = new JInternalFrame("tester", true, true, true, true );
frame.setSize(200, 200);
frame.setVisible(true);
jdp.add(frame);
swingNode.setContent(jdp);
});
}
}