我正在尝试为java应用程序创建表单。它包含一个带有用户列表的Combobox。 让我们说我有一个班级教授,有3个属性。 Id是数据库所需的“唯一”数据。
public class Professor
private String id;
private String lastName;
private String firstName;
我认为用户最友好的选择是在组合框中填写'教授'的姓氏和名字。上课,这就是我所做的。 但现在我无法弄清楚如何让教授的对象回归。
就像我说的那样,我使用lastName,空格和firstName填充组合框,但是一旦用户选择了教授,我就无法弄清楚如何选择用户选择的教授。
有没有办法在Combobox中放置索引和值?第一个选项是John Smith,第二个选择是Jane Adams ...... 我已经尝试过使用地图集合,列表“ID'属性,但我似乎无法弄清楚如何链接2.
非常感谢任何帮助。
编辑: 找到了答案。最简单的解决方案是使用自定义类填充Combobox,这里是教授'对象。我认为那是不可能的,但显然确实如此。 添加一个toString()方法到您的类,具有您想要的。在我的情况下,lastName + firstName。 添加@Override注释,它将在Combobox中显示,同时仍然可以轻松访问任何属性。
答案 0 :(得分:1)
您的问题中有两个不同的问题:
John Doe
代替Professor@71c3cfdd
)对于第一个问题,我会创建一个StringConverter,它将以一个人类可读的字符串转换你的教授对象。
实施示例:
public class ProfessorConverter extends StringConverter<Professor> {
@Override
public Professor fromString(String professorAsString) {
// Create a professor from a string, e.g. (assuming that
// the professorAsString as the form "1 John Doe"
String[] pieces = professorAsString.split(" ");
return new Professor(pieces[0], pieces[1], pieces[2]);
}
@Override
public String toString(Professor professor) {
// Converts your professor to a String of type "John Doe"
return professor.getFirstName() + " " + professor.getLastName();
}
}
然后将您的ProfessorConverter实例分配给ComboBox:
box.setConverter(new ProfessorConverter());
对于第二个问题,您可以使用ComboBox对象的selectionModel来获取所选对象(您将获取的对象类型由您在ComboBox声明中使用的泛型指定,即{{1在我们的例子中)。
ComboBox<Professor>
如果没有选择教授,将返回所选教授或Professor selectedProfessor = box.getSelectionModel().getSelectedItem();
。
要填充ComboBox,我使用null
的实用程序方法从正常的&#39;中创建一个新的FXCollections
。 java list。
ObservableList
希望有所帮助:)
答案 1 :(得分:0)
您使用哪种Combobox?我想这是JCombobox。 无论如何,我建议你阅读API。 对于JCombobox,它是http://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html。 在那里你会找到获取所选项目的方法。 http://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#getSelectedIndex-- 获取所选对象 http://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#getSelectedObjects-- 等