2014-04-08 33 views
1

我正在嘗試爲java應用程序創建一個窗體。它包含一個帶有用戶列表的組合框。 假設我有一個班級教授,有3個屬性。 Id是數據庫所需的「唯一」。如何使用帶有組合框的列表/地圖

public class Professor 
    private String id; 
    private String lastName; 
    private String firstName; 

我想通最用戶友好的辦法是,以填補姓和「教授」類,這是我做的第一個名字的組合框。 但現在我不知道如何獲得教授對象。

就像我說的,我用lastName,一個空格和firstName填充了組合框,但是一旦用戶選擇了教授,我就不知道如何選擇用戶選擇的教授。

有沒有方法可以將一個索引和一個值放在Combobox中?在第一個選項將是約翰史密斯,第二個將是簡·亞當斯... 我試過使用地圖集合,'ID'屬性的列表,但我似乎無法弄清楚如何鏈接2.

任何幫助將不勝感激。

編輯: 找到了答案。最簡單的解決方案是用自定義類填充組合框,這裏是「教授」對象。我認爲這是不可能的,但顯然是這樣。 添加toString()方法到你的類,你想要它。在我的例子中是lastName + firstName。 向它添加一個@Override註釋,並將它顯示在Combobox中,同時仍然可以讓您輕鬆訪問任何屬性。

回答

1

兩個在你的問題不同的問題:在你的組合框教授

  1. 具有用戶友好的表示(John Doe而不是[email protected]
  2. 獲取從組合框返回選定的對象。

對於第一個問題,我將創建一個StringConverter,它將用一個可讀的字符串轉換您的Professor對象。實施

例子:

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聲明中使用的泛型指定,即我們的例子中的ComboBox<Professor>)。如果選擇沒有

Professor selectedProfessor = box.getSelectionModel().getSelectedItem(); 

將返回選定的教授或null

要填充組合框,我使用FXCollections的實用方法從「普通」java列表創建新的ObservableList

List<Professor> myListOfProfessors = ... ; 
box.setItems(FXCollections.observableList(myListOfProfessors)); 

希望它能幫助:)

+0

感謝您的回答。我已經設法以不同的方式解決問題,但您的解決方案看起來也不錯,也許有些人可以使用它。 –

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--

+0

對不起,忘了澄清。我實際上使用的是JavaFX的Combobox,它不包含getSelectedIndex方法或任何與索引有關的指令 –

+0

Hmm JavaFX。那是另一個框架。 那麼根據你將使用的文檔:getValue。 http://docs.oracle.com/javafx/2/api/index.html?javafx/scene/control/ComboBox.html 「將用戶輸入的內容(當ComboBox可編輯時)轉換爲對象的類型T,使得輸入可以通過值屬性獲取。「 仔細看看 http://stackoverflow.com/questions/16437872/fxml-combobox-get-the-selected-value-into-javafx 然後回答。 – Viggo

+0

謝謝,我早先設法找到了答案。將用答案編輯我的問題。再次感謝! –

相關問題