Как я могу заменить наследование SkinBase в JavaFX11 - PullRequest
2 голосов
/ 24 сентября 2019

Я переношу приложение, содержащее JavaFX 2 на OpenJDK11.У меня ошибка из-за исчезновения наследования SkinBase с StackPane.Я больше не могу использовать методы, такие как методы событий (определенные в Node), getChildren() (определенные в Parent) и многие другие, которые требуют наследования ...

Это мой предыдущий класс в Java 1.7, что я хочу в JDK11:

public class WellPlateSkin<T> extends SkinBase<WellPlate, WellPlateSkin.DummyBehaviour>
{
    public WellPlateSkin(final WellPlate control) {
        super(control, new DummyBehaviour(control));
...
setOnMouseDragged(new EventHandler<MouseEvent>()
        {
            @Override
            public void handle(MouseEvent mouseEvent)
            {
                dragging = true;
                onMouseDragged(mouseEvent);

            }
        });
        setOnMousePressed(new EventHandler<MouseEvent>()
        {
            @Override
            public void handle(MouseEvent mouseEvent)
            {
                mousePressed = new Point2D(mouseEvent.getX(), mouseEvent.getY());
                getChildren().add(glass);
                removeSelection();
                rubber.setHeight(0);
                rubber.setWidth(0);
                dragging = false;
            }
        });

        setOnMouseReleased(new EventHandler<MouseEvent>()
        {
            @Override
            public void handle(MouseEvent mouseEvent)
            {
                if (!dragging) {
                    selectNode(new Point2D(mouseEvent.getX(),mouseEvent.getY()));

                }
                mousePressed = null;
                getChildren().remove(glass);
                dragging =false;
            }
        });

Эти методы наследуют от Class Node или Parent. Это работает, потому что подпись SkinBase была (до JavaFX8):

public abstract class SkinBase<C extends Control, B extends BehaviorBase<C>> extends StackPane implements Skin<C> { 

И StackPane являетсяпотомок Pane, который является потомком Region, который является потомком Parent и который является потомком Node.

Теперь, в JDK11, подпись SkinBase

public abstract class SkinBase<C extends Control> implements Skin<C> {

Наследованиебольше не существует, и эти функции больше не определены (супер () тоже).Каков наилучший способ решить эту проблему?Спасибо за ваш ответ!

...