java - 用于访问子面板元素的更漂亮的解决方案

标签 java swing oop user-interface

使用 Java 的 Swing,您经常需要将元素包装到其他元素中才能实现所需的布局。然而,这些面板的元素确实需要可由 super 面板(进一步称为 View )访问,例如在表单提交时。

考虑以下(简化的)示例:

class AddUserView extends JPanel {

   private JPanel elementWrapper = new JPanel();
   private JPanel buttonWrapper = new JPanel();

   private JTextField userNameField = new JTextField();
   private JButton submitButton = new JButton("Submit");

   public AddUserView() {

      // .. add elements to the wrappers
      elementWrapper.add(userNameField);
      buttonWrapper.add(submitButton);

      // .. add listeners etc

      // Add the wrappers to the view
      add(elementWrapper);
      add(buttonWrapper);

   }

}

这显然是有效的,但是我认为这是一个丑陋的解决方案,因为现在 view 拥有所有元素,而不是包装器 - 我认为后者更合适。更多信息,现在所有(即)GridBagConstraints 都必须放置在 View 中。

当然,一种解决方案是将所有元素放入适当的包装类中,然后将其设为 public + final,或者创建无数的 getter 和 setter.

但是,我确信有一种更漂亮的 OOP 方法来实现这一点?

最佳答案

嗯,我不相信这里有银弹解决方案。

当我使用 Swing 时,我尝试记住以下几点: - 使用封装。将您的面板视为可重复使用的组件。 - 尽可能将数据层与 View 解耦。

当应用于您的问题时,这可能意味着以下内容: - 你的AppUserView面板唯一知道的是2个包装器:elementWrapper和buttonWrapper。这些是“黑匣子”——可重用组件,AppUserView 可以“按原样”使用。 每个“包装器”都有一个关于按钮/文本字段/它需要的任何内容的引用。 数据模型应该与这些 View 完全解耦,唯一的交互应该是通过事件来完成,当模型决定应该触发某些事件时,相关 View 应该注册为这些事件的监听器并分别使用react。

希望这有帮助

关于java - 用于访问子面板元素的更漂亮的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306266/

相关文章:

java - 从按钮获取文本到选定的文本字段

java - 你如何在java swing包中制作一个专栏

oop - 在方法中对参数进行排序有哪些约定?

php - 用于列表样式 PHP 项目的标准 OOP 技术

java - 使用@JsonFormat 的 jackson 日期格式?

Java 按钮 : adding an ActionListener

java - 如何将 .txt 文件添加到 JTextArea 以及放置我的 .txt 文件的位置?

oop - 如何强制将struct中的所有字段像OOP中的构造器一样填充?

java - 在另一个 JavaBean 中设置绑定(bind)的 JavaBean

java - 将 2 层 Java 应用程序迁移到...?