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,我们显然有着相同的编程风格/惰性。但这里有一个额外的渲染器。