如何使用带有组合框的列表/地图

时间:2014-04-08 16:02:28

标签: java list map combobox javafx

我正在尝试为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中显示,同时仍然可以轻松访问任何属性。

2 个答案:

答案 0 :(得分:1)

您的问题中有两个不同的问题:

  1. 在ComboBox(John Doe代替Professor@71c3cfdd
  2. 中拥有用户友好的教授代表
  3. 从ComboBox中获取所选对象。
  4. 对于第一个问题,我会创建一个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--