java - Swing编程——如何传递UI组件

标签 java swing dependency-injection

我试图了解 UI 组件应该如何在 Java 中连接。就常规“服务器”类而言,我尝试使用接口(interface)并使用 Spring 注入(inject)所有内容。对于 UI,是否应该使用类似的方法?

更准确地说,让我们考虑以下内容:

class Panel1 extends JPanel{

    public Panel1(Service service, DBConnector db);
}

class Panel2 extends JPanel{

    public Panel1(Delegate delegate, Executor exec);
}

class MainFrame{

    public MainFrame(Service service, DBConnector db, Delegate delegate, Executor exec){
        Panel1 p = new Panel1(service, db);
        Panel1 p = new Panel1(delegate, exec);
    }
}

对比

class MainFrame{

    public MainFrame(Panel1 panel1, Panel2 panel2){
    }
}

我只是想大致了解 UI 世界中什么更合适,如果它与常规类完全不同(可能是因为主框架中可能涉及许多面板)

最佳答案

我还没见过有人在 UI 中使用 DI;这可能是因为 DI 是一个相当新的概念(与构建 UI 相比),或者大多数人都转向 MVC在 UI hell 中生活了一段时间后,MVC 解决了所有问题。

此外,大多数 UI 都是静态的,因为您可以使用按钮打开和关闭窗口/对话框,但不能用一个对话框替换另一个对话框。这会很方便,但前提是我作为用户/消费者能够做到这一点。编写两个执行相同操作的对话框,然后使用 DI 连接其中一个,这是没有意义的;您要么需要两个不同的对话框,要么只需要一个。

当 UI 支持扩展时(如 Eclipse),它们使用插件系统在运行时加载 UI 元素,其中的代码发现菜单、工具栏等并添加元素。

e4(Eclipse 的最新代码库)将 DI 用于许多事情,但不用于构建 UI。同样,UI 通常是静态的,因为您永远不会在某个地方有两个或多个服务可供用户选择。

因此,使用 DI 可能有意义,但它可能是开创性的工作(即,您必须探索可能性空间并自己找到低复杂性山谷)。

关于java - Swing编程——如何传递UI组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707939/

相关文章:

dependency-injection - 在struts2 Action 中注入(inject)EJB?

c# - 如何将连接字符串注入(inject) IDbContextFactory<T> 的实例?

java - Braintree 与 Android Eclipse 项目的集成

java - 如何将 ImageJ 用作单独 Java 应用程序的库?

java - JTextField 输入输出

java - Java Swing 应用程序的一个很好的例子是什么?

java - 如何创建一个弹出忙碌标签并且在执行时可以取消的任务?

java - eclipse 中的代码格式化警告

java - 在 JDialog 中丢失鼠标单击功能

angular - Angular 4 ReactiveFormsModule 不应该使用 forRoot 模式吗?