Java 具有两种toString方法的自定义JCombobox模型

Java 具有两种toString方法的自定义JCombobox模型,java,swing,jcombobox,Java,Swing,Jcombobox,我也有类似的问题 我已经更改了代码,因此我将得到一个Employee-对象(我更改了我的类名,因为上面链接中的类名是Employee) 在我的例子中,我已经有了一个toString()方法,我不想覆盖它。(我在别的地方需要它) 但是我不想在我的JCombobox中使用这个toString()方法。但是它会自动的 我不想返回任何字符串!我需要这些东西 在创建JCombobox时,有没有一种方法可以说“使用另一个toString()方法,让我们说toString不同()” this.comboEmp

我也有类似的问题

我已经更改了代码,因此我将得到一个
Employee
-对象(我更改了我的类名,因为上面链接中的类名是
Employee

在我的例子中,我已经有了一个
toString()
方法,我不想覆盖它。(我在别的地方需要它)

但是我不想在我的
JCombobox
中使用这个
toString()
方法。但是它会自动的

我不想返回任何字符串!我需要这些东西

在创建JCombobox时,有没有一种方法可以说“使用另一个
toString()
方法,让我们说
toString不同()

this.comboEmployees = new JComboBox(new EmployeeComboboxModel(getEmployees())); 
// this will give me the toString-method's return-value of the Employee object. 
// But i want the toStringDifferent() method's result.

谢谢

事实上,不使用
toString
甚至被认为是良好的实践

comboEmployees.setRenderer(new DefaultListCellRenderer() {
    @Override
    public Component getListCellRendererComponent(JList list,
                                               Object value,
                                               int index,
                                               boolean isSelected,
                                               boolean cellHasFocus) {
        Employee employee = (Employee)value;
        value = employee.toStringDifferent();
        return super.getListCellRendererComponent(list, value,
                index, isSelected, csellHasFocus);
    }
});

您需要创建JComboBox并实现toString方法

例如:

public class        MyComboBox
    extends     JComboBox
{
  public String toString() {
    return "My toString";
    }
}

使用
ListCellRenderer
。例如int


另一种方法是将对象包装在定义其自己的
toString()方法的对象中。

我想您可能误解了这个问题;)这对我很有用。不知怎的,我得到了一个空指针(我认为是第一个或最后一个条目)。我在“value=employee.toStringDifferent();”上做了一个if(employee!=null),结果成功了。@Joop:“事实上,不使用toString甚至被认为是一种好的做法。”谁说的?@splungebbb我曾经用
toString
给出了答案,并得到了一个批评性的评论。我不认为这是一条铁律,我会利用最合适的时机。但是我承认在JMCOBOBOX中只写一个ToStand也不是一个好的风格。Joop:我认为这更取决于个人的喜好。对于一些非常特殊的需求,我已经多次使用自定义渲染器方法,但总的来说,为我的应用程序中的每个组合编写自定义渲染器(强制转换为特定对象类型)似乎很疯狂。@splungebob,我们显然有着相同的编程风格/惰性。但这里有一个额外的渲染器。