java - 接口(interface)和节点的存储和使用

标签 java javafx interface

好的,我正在开发 JavaFX 软件。我正在使用 BorderPane,假设我希望表单位于右侧。用户可以通过菜单在表单之间进行切换。我希望能够建议用户在更改为另一个表单之前保存/完成表单(或不保存)。

所以我采用了一个简单的解决方案,一个接口(interface),我将在自定义节点上实现它:

public interface Closable {
    public abstract void close();
}

我将它们存储在名为 ApplicationMainWindow 的自定义 BorderPane 中:

public class ApplicationMainWindow extends BorderPane {
    private HashMap<Pos,Closable> windowContent;
}

现在我将设置 ApplicationMainWindow 过程,在更改之前我将用它来检查右侧的当前节点,问题就来了

public void changeRight(Closable c) {
    this.windowContent.get(Pos.CENTER_RIGHT).close();
    this.setRight((Node)c);
    this.windowContent.put(Pos.CENTER_RIGHT,c);
}

现在正如您所看到的,它根本不干净,因为它假设我只会在 Node 子类中实现 Closable。现在,当然,我可以确保它实现 Closable 并从 Node(或子节点)扩展,这样做:

public void changeRight(Closable c,Node n) {
    this.windowContent.get(Pos.CENTER_RIGHT).close();
    this.setRight(n);
    this.windowContent.put(Pos.CENTER_RIGHT,c);
}

但它仍然不会干净,因为我们会调用如下所示的方法:

mainWindow.changeRight((Closable)myForm,(Node)myForm);

是否有更好/更简洁的设计来实现此功能?

最佳答案

正如我所期望的,我的老师提供了一个简单干净的解决方案。这是我的 Closable 界面:

public interface Closable {
    public abstract void close();
}

我需要做的就是创建一个新的接口(interface),该接口(interface)将使用 getNode() 方法从 Closable 扩展:

public interface NodeClosable extends Closable {
    public Node getNode();
}

现在我需要做的就是在我的表单类中实现这个接口(interface)

public class MyForm extends VBox implements NodeClosable {

    public Node getNode() {
        return this;
    }

    public void close() {
        /* some code here */
    }
}

在我的 ApplicationMainWindow 中,我需要/做的就是:

public class ApplicationMainWindow extends BorderPane {
    private HashMap<Pos,NodeClosable> windowContent;

    public void changeRight(NodeClosable nc) {
        this.windowContent.get(Pos.CENTER_RIGHT).close();
        this.setRight(n.getNode());
        this.windowContent.put(Pos.CENTER_RIGHT,c);
    }

也许可以在一个界面中设置这两种方法。

关于java - 接口(interface)和节点的存储和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44256646/

相关文章:

java - 接受 GET 时未接受 POST 请求

java - JavaDoc 中的 {@code memberData} 和 <code>memberData</code> 有什么区别

java - 数组列表和文件

popup - JavaFX 2 自定义弹出 Pane

java - 接口(interface)层次结构中的循环

c# - 实现 .Net 接口(interface) (C#)

java - 递归代码无法正常工作

java - 图像未正确覆盖按钮

C# 按实现拆分接口(interface)列表

JavaFX colspan 不适用于 GridPane 中的文本