2015-06-21 65 views
-1

显示的项目名称我填一个组合框的项目从一个实体类用下面的代码:涂改中的JComboBox

private void fillPositionComboBox(){ 
    EntityManager em = JPAUtilities.getEntityManagerFactory().createEntityManager(); 
    positionComboBox.removeAllItems(); 
    try{ 
     List<Position> list = em.createQuery("select p from Position p order by p.positionCode").getResultList(); 
     for(int i=0; i<list.size();i++){ 
      positionComboBox.addItem(list.get(i)); 
     } 
    } 
    catch(Throwable t){ 
     JOptionPane.showMessageDialog(this, t.toString()); 
    } 
    finally{ 
     em.close(); 
    } 
} 

但是,当我运行该程序,并单击组合框,它是显示的怪异文字下拉列表。我想用实体position.getPositionName();替换那些特殊的字符串说奇怪的文本,如字符串。可能吗 ?如果是这样,pleaaase显示代码如何做,并给出解释代码。非常感谢你的帮助!

+0

https://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer –

+0

@JBNizet,非常感谢,真的有帮助 – Logos

回答

0

我不知道我是否理解你的问题,但如果你想让你的JCombobox显示与它存储的文本不同的文本,所以你应该创建一个具有内部文本和方法toString()的类,它返回一个不同的文字是这样的:

class MyData{ 
    private String data; 
    MyData(String text){ 
    data = text; 
    } 
    public String toString(){ 
    if(condition) return data; 
    else return "Something else"; 
    } 
} 

然后,你必须创建一个使用这个类JCombobox

JComboBox<MyData> combo = new JComboxBox<>() 

并将其添加到0123之前,把每一个导致MyData对象。