Java Swing setEditable(布尔)在带有自定义渲染器的JComboBox中不工作
我有一个Java Swing setEditable(布尔)在带有自定义渲染器的JComboBox中不工作,java,swing,jcombobox,packaging,renderer,Java,Swing,Jcombobox,Packaging,Renderer,我有一个JComboBox类型的myclass。我使用CustomListRender来显示myclass的一个属性,它工作正常 然后我设置myCombobox.setEditable(true)JComboBox可编辑,但默认情况下,文本在组合框中设置为类似以下内容: com.mypackagename.myclass 有人能告诉我如何解决这个问题吗 提前感谢。如中所述 默认渲染器知道如何渲染字符串和图标。如果将其他对象放入组合框中,默认呈现器将调用toString方法来提供要显示的字符串
JComboBox
类型的myclass
。我使用CustomListRender
来显示myclass
的一个属性,它工作正常
然后我设置myCombobox.setEditable(true)JComboBox
可编辑,但默认情况下,文本在组合框中设置为类似以下内容:
com.mypackagename.myclass
有人能告诉我如何解决这个问题吗
提前感谢。如中所述
默认渲染器知道如何渲染字符串和图标。如果将其他对象放入组合框中,默认呈现器将调用toString
方法来提供要显示的字符串
除非重写,否则您可能会看到从对象继承的实现。至少,您需要重写MyClass#toString()
或相应地更新渲染器提供的代码;有一个相关的例子。大多数人倾向于后者;显示自定义渲染器将更容易建议备选方案。也许您还需要创建并使用自定义ComboBox编辑器。您可以使用setSelectedIndex(int-anIndex)或setSelectedItem(Object-anObject)初始化组合框。MyClass
用于符合Java类命名约定。据我所知,他已经有了自定义的呈现程序。他还需要一个自定义编辑器,以避免标准编辑器的toString
调用。我不太喜欢为UI重写到字符串purposes@Robin:关于编辑的好观点;更新。我希望有一个比我引用的更相关的例子。我对重写toString()
(比如在enum
中)更为乐观。我将重点放在这一点上,以解释问题中提到的(假定的)结果。你能详细说明一下这些陷阱吗?这不是真正的陷阱,只是即使在生产代码中,我也敢定期更改toString
方法以提供更好的信息(例如在记录器中打印更多信息)。在这种情况下,通过使用默认呈现器/编辑器(自定义呈现器/编辑器)隐藏对该方法的依赖可能会破坏UI。我的IDE永远不会发现渲染器中使用了toString