0

我正在为我正在构建的程序创建一个向导。

我有三个类,它们结合起来构建一个向导框架并显示所有需要收集所有相关信息以创建新项目的面板。

第一个是 JPanel 的抽象扩展,因此某些值和方法始终可用,每个扩展下面的类都有自己独特的构造函数,用于传递填充各种组合框、列表等所需的数据。

public abstract class baseWizPanel extends JPanel {
  protected boolean isValid = false;
  protected final int lblWidth = 85; 

  public baseWizPanel(String Name) {
    setLayout(new BorderLayout(0, 0));

    JLabel lblStepName = new JLabel(Name);
  }

  public abstract boolean isDataValid();
  public abstract void validate();
  public abstract String getMessage();
}

第二个是收集 baseWizardPanel 和名称的类,这将用于在将来的版本中存储其他内容。以防万一您想知道为什么还要拥有它。

public class WizardStep {
  private String Name;
  private baseWizPanel pnlToAdd;

  public <T extends baseWizPanel> WizardStep(String n, T p) {
    this.Name = n;
    this.pnlToAdd = p;
  }

  public String getName() {
    return this.Name;
  }

  public Component getPanel() {
    return this.pnlToAdd;
  }
}

最后一个类是 JDialog 的扩展,它将所有部分组合在一起并将它们作为逐步过程呈现给用户。

以前我一直在以与此类似的方式使用实现我的向导。

  1. 加载所有相关数据。
  2. 创建 WizardStep 的 ArrayList
  3. 使用 ArrayList.add(new WizardStep("name", new baseWizPanel(arguments))) 构建数组;
  4. 加载向导类并显示

这可以很好地创建向导并将其显示给用户。我现在要做的是使用我构建的通用数据加载功能,将所有数据加载保存在一个地方,我需要能够从类的 ArrayList 创建向导。

所以我想去

public class loadData {
  loadData(ArrayList<class> classestoload)


  dataset1 = load data from data source
  dataset2 = load data from data source
  dataset3 = load data from data source
  dataset4 = load data from data source
  dataset5 = load data from data source

  for each class in classestoload {
    create class

    if class = class1 {
       use class1 constructor with dataset 1 & 2
    }

    if class = class2 {
       use class1 constructor with dataset 5
    }

    if class = class3 {
       use class1 constructor with dataset 2 & 3
    }

    if class = class4 {
       use class1 constructor with dataset 4 & 5
    }
  }
}

我可以使用从Java 中的字符串创建新对象中的代码来创建我需要的类,但是要使用构造函数并传递我需要知道该类的正确数据,我可以使用 instanceof 但我读过的所有内容都说这是不是一个好的选择。

现在我的问题是我应该在这里做什么,这样我就不必使用 instanceof 或者我应该使用什么来代替 instance of?

4

0 回答 0