2

我正在迁移一个包含JavaFX 2to的应用程序OpenJDK11。由于SkinBasewith的继承消失,我有一个错误StackPane。我不能再使用像事件方法(定义在Node),getChildren()(定义在Parent)和许多其他需要继承的方法......

这是我在 JDK11 中想要的 Java 1.7 中的上一个类:

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 的子节点,Region 是 Parent 的子节点,也是 Node 的子节点。

现在,在 JDK11 中,SkinBase 的签名是

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

Inheritence 不再存在,这些函数也不再定义(super() 也没有)。解决这个问题的最佳方法是什么?谢谢您的回答 !

4

0 回答 0