Я не использую Hibernate, но, учитывая сущность JPA с именем Customer
и контроллер JPA с именем CustomerJpaController
, вы можете сделать что-то подобное.
Обновление: код обновлен, чтобы отразить переход на EclipseLink (JPA 2.1) в качестве постоянной библиотеки.
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.JFrame;
/**
* @see http://stackoverflow.com/a/2531942/230513
*/
public class CustomerTest implements Runnable {
public static void main(String[] args) {
EventQueue.invokeLater(new CustomerTest());
}
@Override
public void run() {
CustomerJpaController con = new CustomerJpaController(
Persistence.createEntityManagerFactory("CustomerPU"));
List<Customer> list = con.findCustomerEntities();
JComboBox combo = new JComboBox(list.toArray());
combo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox) e.getSource();
Customer c = (Customer) cb.getSelectedItem();
System.out.println(c.getId() + " " + c.getName());
}
});
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(combo);
f.pack();
f.setVisible(true);
}
}
Объекты, добавленные к JComboBox
, получают свое отображаемое имя из метода toString()
объекта, поэтому Customer
был изменен для возврата getName()
для целей отображения:
@Override
public String toString() {
return getName();
}
Подробнее о JComboBox
можно прочитать в статье Как использовать комбинированные поля .