我试图了解 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/