2014-04-08 2 views
1

자바 애플리케이션 용 양식을 만들려고합니다. 그것은 사용자리스트와 함께 콤보 박스를 포함합니다. 3 개의 속성을 가진 클래스 교수가 있다고 가정 해 봅니다. ID는 데이터베이스에 필요한 '고유'입니다. 콤보 박스로 목록 /지도를 사용하는 방법

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

내가 가장 사용자 친화적 인 옵션은 마지막 이름과 내가 한 일이다 '교수'클래스의 이름과 콤보 상자를 채울 것입니다 생각. 하지만 이제는 교수 객체를 다시 얻는 방법을 알 수 없습니다.

내가 말했듯이, 나는 콤보 박스에 lastName, 공백 및 firstName을 채웠지 만 일단 사용자가 교수를 선택하면 사용자가 선택한 교수를 선택하는 방법을 알 수 없습니다.

인덱스와 값을 콤보 박스에 넣을 수있는 방법이 있습니까? 첫 번째 옵션으로 존 스미스 것, 두 번째 것입니다 제인 아담스 ... 'id'속성의 목록, 맵 컬렉션을 사용하여 시도했지만 연결하는 방법을 알아낼 수 없습니다. 2.

도움을 주시면 감사하겠습니다.

편집 : 답을 찾았습니다. 가장 쉬운 해결책은 콤보 박스에 사용자 정의 클래스 (여기서는 '교수'객체)를 채우는 것입니다. 그럴 수는 없다고 생각했지만 분명히 그렇습니다. 클래스에 toString() 메서드를 원하는대로 추가합니다. 내 경우에는 lastName + firstName. @Override 주석을 추가하면 모든 속성에 쉽게 액세스 할 수 있지만 Combobox에 표시됩니다.

답변

1

두 개의 서로 다른 문제 :

  1. 되세요 사용자 친화적 콤보 상자에서 교수의 표현 (John Doe 대신 [email protected])
  2. 가져 오기 ComboBox에서 선택한 객체를 다시 가져옵니다.

첫 번째 문제의 경우, 나는 교수형 객체를 인간이 읽을 수있는 문자열로 변환하는 StringConverter을 만들 것입니다. 구현의

예 : 당신은을 얻을 수있는 콤보 상자 개체의 selectionModel의를 사용할 수 있습니다, 두 번째 문제에 대한

box.setConverter(new ProfessorConverter()); 

:

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의 선언에 사용하는 제네릭 (예 : ComboBox<Professor>)로 지정됩니다.아무것도 선택되어 있지 않은 경우

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

선택한 교수 또는 null를 반환합니다.

ComboBox를 채우기 위해 FXCollections 유틸리티 메서드를 사용하여 '보통'Java 목록에서 ObservableList을 새로 만듭니다.

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

는 희망이 도움 :)

+0

답변 해 주셔서 감사합니다. 나는 이미 다른 방식으로 그것을 해결할 수 있었지만 당신의 솔루션은 꽤 좋아 보이기도했다. 어쩌면 어떤 사람들은 그것을 사용할 수있을 것이다. –

0

어떤 종류의 콤보 박스를 사용하고 있습니까? 나는 그것이 JCombobox라고 생각한다. 어쨌든 API를 읽으시기 바랍니다. JCombobox의 경우 http://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html입니다. 여기에는 선택한 Item을 가져 오는 메소드가 있습니다. 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

흠 JavaFX. 그것은 또 다른 틀이었습니다. 문서에 따르면 getValue를 사용합니다. http://docs.oracle.com/javafx/2/api/index.html?javafx/scene/control/ComboBox.html "ComboBox를 편집 할 수있는 사용자 입력을 객체로 변환합니다. 유형이 T 인 경우 입력이 value 속성을 통해 검색 될 수 있습니다. " 자세히 알아보기 http://stackoverflow.com/questions/16437872/fxml-combobox-get-the-selected-value-into-javafx 답변입니다. – Viggo

+0

감사합니다. 이전에 그 답을 찾을 수있었습니다. 대답으로 내 질문을 편집합니다. 다시 한 번 감사드립니다! –

관련 문제