我正在迁移一个包含JavaFX 2
to的应用程序OpenJDK11
。由于SkinBase
with的继承消失,我有一个错误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() 也没有)。解决这个问题的最佳方法是什么?谢谢您的回答 !