【问题标题】:Intellij create combobox using array from another classIntellij 使用来自另一个类的数组创建组合框
【发布时间】:2016-01-11 01:19:07
【问题描述】:

我正在使用 IntelliJ 表单设计器在名为 AddAccountForm 的类中创建一个 JComboBox。我需要使用来自另一个类 (SCMain.java) 的 Java 数组 (InputArray) 来创建 JComboBox。我通过 AddAccountForm 的构造函数将此数组从 Main.java 传递到 AddAccountForm。不幸的是 createUIComponents 运行 before AddAccountForm 的构造函数运行,所以我无法访问它。从当前类之外的数组中设置 JComboBox 的正确方法是什么?

下面的错误代码来自 AddAccountForm.java 并被截断到相关部分。它返回 NPE,因为 this.InputArray 尚未被构造函数加载。

private JComboBox comboTest;
private String[] InputArray;

AddAccountForm(SCMain main, Set<String> InputSet) {
this.InputArray = InputSet.toArray(new String[InputSet.size()]);
}

private void createUIComponents() {
// TODO: place custom component creation code here
comboTest = new JComboBox(this.InputArray);
}

【问题讨论】:

  • 假设createUIComponents 已经在你的AddAccountForm 的构造函数(???)之前执行,那么你应该在AddAccountForm 构造函数中有一个comboTest 的实例,你可以工作与
  • 由于某种原因,在构造函数中将 comboTest 设置为 InputArray 不起作用;它最终成为构造函数之前的模型/createUIComponents 中的任何内容

标签: java arrays swing intellij-idea


【解决方案1】:

从当前类外部的数组中设置 JComboBox 的正确方法是什么?

也许最好的方法是创建一个 ComboBoxModel 对象,并将它传递给包含 JComboBox 的类,让它用它设置组合框的模型。为简单起见,您可以使用 DefaultComboBoxModel&lt;E&gt; 对象,如果您愿意,只需将数组传递给其构造函数即可。

例如,

// note that method and variable names should start with lower-case letters
addAccountForm(SCMain main, Set<String> inputSet) {
    String[] inputArray = inputSet.toArray(new String[0]);
    DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>(inputArray);
    comboTest.setModel(model);
}

【讨论】:

  • 难以置信!完美答案,谢谢。我只是在 createUIComponents() 中设置了“comboTest = new JComboBox()”,并在构造函数中使用了上面的代码,它就起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2017-05-27
  • 2023-04-10
相关资源
最近更新 更多