代码之家  ›  专栏  ›  技术社区  ›  Cratylus

类似的输入对话框创建模式/swing

  •  1
  • Cratylus  · 技术社区  · 14 年前

    我用NetBeans在swing中创建了一个UI。
    在一些用例中,用户按下按钮,结果会出现一个JDialog。
    JDialog通过JComboBox接受输入,至少4个。
    例如。
    用户压力 “钮扣” 出现一个JDialog,显示以下内容:

    "select X:" combo  
    "select Y:" combo  
    "select Z:" combo  
    "select O:" combo  etc  
    

    一、 每个组合旁边都有一个描述性标签。除了每个组合之外,每个JDialog中还有一些其他控件,即JCheckbox、JTextarea
    如果用户按下 “按钮B” 出现一个JDialog,显示以下内容:

    "select A:" combo  
    "select B:" combo  
    "select C:" combo  etc  
    

    因此,对话框并不相同,但在它们的表示格式中有一些模式。一、 e.组合框的使用。
    最初,我想创建一个JDialog并为它应该显示在JDialogs标签上的文本传递一些参数,以及JCheckbox是否应该出现,JTextArea是否应该出现,以及用什么文本等等,这一切都取决于JDialog初始化过程中传递的参数,以便为所有人提供一个类用例,但是代码开始变得非常复杂,我拒绝了这种方法。
    我所做的是通过GUI设计器创建一个JDialog,完全按照每次按钮按下的需要,并生成大约10-11个这样的JDialog。
    这个方法使编程简单得多,但我不知道这是否是处理这个问题的标准方法,因为我为输入创建了10-11个额外的类。
    我的问题是,我所做的是合理的,还是有更好的方法来处理这种情况。
    谢谢您!

    1 回复  |  直到 14 年前
        1
  •  3
  •   RedGrittyBrick    14 年前

    我想我应该编写一个返回JDialog的DialogBuilder类。


    编辑:

    对话的可视化与程序化创建

    我习惯于通过编写代码来生成对话框。在Java出现之前,我经常在Delphi中编写代码,在Delphi中使用图形用户界面创建对话框,所以最初我确实觉得这很烦人,甚至很乏味。现在我比较喜欢它。所以是的,我可能会抛出(大部分)由netbeans创建的对话框代码。除非你的对话比你提出的问题复杂。

    复杂性

    是的,有一种危险,那就是你最终会花很多时间来创建相当复杂的代码。但是,如果你像我一样,你会学到很多。你将学到的是如何使用各种模式来避免这种复杂性。找到一个优雅的方法来解决这些问题是我感到非常满意的事情-这是编程的一个方面,我觉得最愉快。

    参数

    当你提到你所关心的 if argA&& argB && !argC then display JCheckbox 对于10-11个不同的jdialogs“-我只能建议您尝试从不同的方向解决问题。例如,可以向DialogBuilder传递一个标签对和jcombobox的列表。或者您可以扩展JCombobox,以便它有一个额外的字段和一个getter作为它的标签。

    例如

    DialogBuilder builder = new DialogFactory();
    builder.add("Select X:", new Xcombo(...), true);  // with checkbox
    builder.add("Select Y:", new Ycombo(...), false); // without
    ...
    builder.getDialog.setVisible(true);
    

    builder.add("Select X:", new MyCombo(xList), false);
    builder.add("Select Y:", new MyCombo(yList), false);
    

    您可以看到(我希望)DialogBuilder.add(String,JComboBox,boolean)方法不需要很多复杂的 if ... then ... else 条款。

    只值我0.02美元。