JFXPanel в JFrame вызывает падение кадра при движении мыши - PullRequest
0 голосов
/ 09 июня 2019

Я работаю над внедрением экрана входа JavaFX в приложение Swing.

Я добавил JFXPanel в фрейм контента JPanel. После загрузки приложения все будет хорошо и гладко, пока я не наведу курсор мыши на панель содержимого (см. Ссылку ниже для просмотра видео). В то время как моя мышь активно движется в области, рендеринг становится очень медленным:

  • Становится медленным, когда мышь входит в панель enter image description here

Желаемое поведение:

  • Использование разработанного JavaFX пользовательского интерфейса в Swing с помощью JFXPanel без существенного снижения производительности

Приведенный ниже код является минимальным воспроизводимым примером этой проблемы.


import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.*;

import javax.swing.*;
import java.io.IOException;
import java.net.URL;

public class TestJFXPanel {

    public static void main(String[] args) throws IOException {

        /*
         Create pane with as background an animated image (GIF)
         */
        final Pane pane = new Pane();
        final URL url = new URL("https://i.stack.imgur.com/AvkzQ.gif");
        pane.setBackground(new Background(new BackgroundImage(
                new Image(url.openStream()),
                BackgroundRepeat.NO_REPEAT,
                BackgroundRepeat.NO_REPEAT,
                BackgroundPosition.CENTER,
                BackgroundSize.DEFAULT)));

        /*
         Set the pane as root of a Scene
         */
        final JFXPanel panel = new JFXPanel();
        panel.setScene(new Scene(pane, 500, 500));

        /*
         Invoke JFrame on AWT thread
         */
        SwingUtilities.invokeLater(() -> {

            final JFrame jFrame = new JFrame();

            // Add JFXPanel to content pane of JFrame
            jFrame.getContentPane().add(panel);
            jFrame.pack();

            jFrame.setVisible(true);
        });
    }
}

Мои мысли:

  • Я подозреваю, что это как-то связано с перенаправлением движения мыши на Swing из JavaFX, что вызывает задержку связи между потоками FX и Swing. Я думаю, что это особенно дорого, потому что я использую GIF в качестве фонового изображения экрана входа в систему.
  • Я не уверен, вызвано ли это задержкой связи FX и Swing, если это так, то обработка всего моего пользовательского интерфейса FX в Swing решит эту проблему (при условии, что это более осуществимо, чем перенос всей конструкции на Swing). )?

Однако, если кто-то более знаком с интеграцией JavaFX с Swing и считает, что мои подозрения ошибочны. Некоторые советы о том, как поступить, очень ценятся!

Обновление:

  • Когда я переопределяю метод processMouseMotionEvent класса JFXPanel, чтобы не происходило потребления MouseMotionEvents, проблема не возникает. Я думаю, что это может быть проблема совместимости между JavaFX и MacOS.
...