Добавление JPanel в Javafx - PullRequest
       10

Добавление JPanel в Javafx

2 голосов
/ 25 октября 2019

В настоящее время я работаю над решением для цифровых подписей. Я получил планшет для подписи с API. API закрыт, и я ничего не могу изменить в нем. Проблема сейчас для меня, что я не могу справиться с ответами устройства. Делая подпись или рисуя что-то, я получаю ответ в виде JPanel. Поскольку я программирую со сценами JavaFX, я теперь не знаю, как включить JPanel в мою сцену. Я только научился работать с JavaFx, поэтому я не очень разбираюсь в JPanels и прочем.

Итак ... Интересно, есть ли способ добавить Jpanel в FlowPane. Все, что я нашел по этой теме, были темы об обратном. Когда люди пытались добавить компоненты javafx в Jpanel. Но не наоборот ... так что, может быть, совершенно очевидно, как это сделать, но я не понимаю.

JPanel x = pad.startSiganture();
FlowPane flow = new FlowPane();
flow.getChildren.addAll(x);

По сути, это то, о чем я мечтаю, что, конечно, не работает. Итак ... Спасибо за любые ответы, я надеюсь, что это возможно.

YXCD

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Да, это возможно: добавьте свой JPanel в SwingNode и затем поместите его в свою FlowPane:

SwingNode node = new SwingNode()
node.setContent(pad.startSiganture());
FlowPane flow = new FlowPane();
flow.getChildren.addAll(node);
2 голосов
/ 25 октября 2019

Да, это достижимо с помощью SwingNode, который является узлом javafx, который может содержать контент Swing, посмотрите, что написано в документации:

Этот класс используется для встраивания контента Swing в приложение JavaFX. для отображения указывается с помощью метода setContent (javax.swing.JComponent), который принимает экземпляр Swing JComponent. Иерархия компонентов, содержащихся в экземпляре JComponent, не должна содержать никаких тяжеловесных компонентов, в противном случае SwingNode может не отображать его. Содержание перекрашивается автоматически. Все события ввода и фокуса перенаправляются в экземпляр JComponent прозрачно для разработчика.

Вот типичный шаблон, который демонстрирует, как можно использовать SwingNode:

public class SwingFx extends Application {

     @Override
     public void start(Stage stage) {
         final SwingNode swingNode = new SwingNode();
         createAndSetSwingContent(swingNode);

         StackPane pane = new StackPane();
         pane.getChildren().add(swingNode);

         stage.setScene(new Scene(pane, 100, 50));
         stage.show();
     }

     private void createAndSetSwingContent(final SwingNode swingNode) {
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
                 swingNode.setContent(new JButton("Click me!"));
             }
         });
     }

     public static void main(String[] args) {
         launch(args);
     }
 }
...