Совместимость JavaFX и Java

Могу ли я использовать новые функциональные возможности, предоставляемые новыми API-интерфейсами JavaFX, непосредственно из Java в той же степени, в какой я мог бы использовать JavaFX Script?

Являются ли все базовые API JavaFX исключительно Java или JavaFX Script или их смесью?

Подобно stackoverflow.com/questions/359683/javafx-and-java.

Michael Myers 02.04.2009 00:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
1 248
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

API-интерфейсы JavaFX представляют собой смесь JavaFX и Java. SDK поставляется с архивом src.zip, который содержит часть API (включены только самые основные классы, но такие вещи, как javafx.scene, отсутствуют).

Вызов кода JavaFX из Java официально не поддерживается в JavaFX 1.x AFAIK. Существует запись в блоге JavaFX, который показывает вам, как это сделать в любом случае с использованием неподдерживаемых API, но это сложно и не будет работать таким образом в будущих версиях.

Есть два поддерживаемых способа использования JavaFX из Java. Либо вы используете API сценариев для вызова кода JavaFX, как показано в эта статья. Или, что является наиболее элегантным решением IMHO, напишите код доступа к API с помощью JavaFX, определите интерфейсы Java для взаимодействия с вашим кодом JavaFX из простой Java, а затем реализуйте эти интерфейсы в JavaFX.

Нам удалось использовать мультимедийные компоненты с JavaFX с некоторым успехом. они полностью не поддерживаются таким образом и могут быть изменены так же, как пакеты com.sun в JavaSE.

Мы интегрировали их в пользовательский интерфейс Swing и смогли делать то же самое, что и в FX, прямо из Java.

Надеюсь, что они скоро добавят часть этого в основные библиотеки.

Граф сцены, используемый в JavaFX, имеет открытый исходный код. Вы можете проверить это здесь (https://scenegraph.dev.java.net). Хотя сайт не был обновлен, чтобы отразить окончательную версию, поставляемую с JavaFX 1.x, вы все равно можете использовать jar, который поставляется с JavaFX SDK, и смешивать узлы сцены и поворота внутри вашего приложения Swing. Однако у вас возникнут некоторые трудности, потому что для этой версии графа сцены нет официального API.

Вот "привет, мир" с использованием графа сцены, поставляемого с JavaFX 1.0. Не забудьте включить «Scenario.jar» в свой путь сборки.

import java.awt.Color;
import java.awt.Paint;
import java.awt.geom.Point2D;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import com.sun.scenario.scenegraph.JSGPanel;
import com.sun.scenario.scenegraph.SGGroup;
import com.sun.scenario.scenegraph.fx.FXText;



public class HelloWorldScenario101 implements Runnable {



    /**
     * @param args
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new HelloWorldScenario101());
    }



    public HelloWorldScenario101() {
        //
    }



    @Override
    public void run() {

        this.frame = new JFrame();
        this.panel = new JSGPanel();
        this.text = new FXText();
        this.paint = new Color(255, 0, 0, 255);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Hello World");
        frame.add(this.panel);
        frame.setContentPane(this.panel);
        scene = new SGGroup();
        this.text.setText("Hello World");
        this.text.setFillPaint(this.paint);
        this.text.setLocation(new Point2D.Float(10, 10));
        this.scene.add(this.text);
        this.panel.setScene(scene);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

    }



    private JFrame frame;

    private JSGPanel panel;

    private SGGroup scene;

    private FXText text;

    private Paint paint;



}

Другие вопросы по теме