我有一个ArrayList<ROI2D>
,ROI2D包含一个返回字符串的getName();
方法。
我现在希望这些名称显示在JComboBox
中,以便用户可以根据名称选择ROI2D。
使用ArrayList.toArray();
将获得ROI2D的Array [x],但是我可以以某种方式对其执行.getName();
并将其传递给JComboBox吗?或者是创建包含名称的单独数组的唯一方法,然后使用比较来查看用户选择的ROI2D?
答案 0 :(得分:2)
如果您使用的是Java 8,则可以使用Streams API。
List<String> stringList =
roid2dList.stream().map(n -> n.getName).collect(Collectors.toList());
String[] stringArray = new String[stringList.size()];
stringArray = stringList.toArray(stringArray);
在此处查看更多示例: https://www.mkyong.com/java8/java-8-streams-map-examples/
答案 1 :(得分:1)
所以你真正需要做的是简单地覆盖// Form submission handler
onSubmit = async ({ username, password }) => {
this.setState({loading: true})
this.props.authenticate(username, password)
.then(res => {
this.setState({loading: false})
this.props.updateLoggedInStatus(true)
})
.catch(err => {
this.setState({loading: false, errorMessage: err.message})
console.log('err', err)
})
}
方法只返回名称。我做了一个简单的例子来展示它:
主要方法:
toString()
public static void main(String[] args) {
JFrame f = new JFrame();
List<Client> cs = new ArrayList();
cs.add(new Client("Hans", 1));
cs.add(new Client("Peter", 2));
JComboBox c = new JComboBox<Client>(cs.toArray(new Client[] {}));
c.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println(((Client) e.getItem()).getAge());
}
});
f.add(c);
f.pack();
f.setVisible(true);
}
类:
Client
这很有效。 public class Client {
String name;
int age;
public Client(String n, int age) {
name = n;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return getName();
}
}
中的每个条目仅显示名称