【问题标题】:Java Swing setEditable(boolean) not working in JComboBox with custom rendererJava Swing setEditable(boolean) 在带有自定义渲染器的 JComboBox 中不起作用
【发布时间】:2012-10-07 14:06:30
【问题描述】:

我有一个myclass 类型的JComboBox。我用CustomListRender显示myclass的属性之一,效果很好。

然后我设置myCombobox.setEditable(true)JComboBox 变为可编辑,但默认情况下,combobox 中的文本设置为类似这样:

 com.mypackagename.myclass

谁能告诉我如何解决这个问题?

提前致谢。

【问题讨论】:

  • 也许您还想创建和使用自定义 ComboBoxEditor。
  • 您可以使用 setSelectedIndex(int anIndex)setSelectedItem(Object anObject) 来初始化您的 ComboBox。

标签: java swing jcombobox packaging renderer


【解决方案1】:

How to Use Combo Boxes: Providing a Custom Renderer 中所述,

默认渲染器知道如何渲染字符串和图标。如果将其他对象放在组合框中,默认渲染器会调用toString 方法提供要显示的字符串。

除非被覆盖,否则您可能会看到从 Object 继承的 toString() 实现。至少,您需要覆盖MyClass#toString()更新您的渲染器 相应地提供custom editor;有一个相关的例子here。大多数人更喜欢后者;您的 sscce 显示您的自定义渲染器将更容易建议替代方案。

【讨论】:

  • MyClass 用于符合 Java 类命名约定。
  • 据我了解的问题,他已经有一个自定义渲染器。他还需要一个自定义编辑器,以避免标准编辑器的toString 调用。而且我不喜欢为 UI 目的覆盖 toString
  • @Robin:关于编辑器的好点;更新。我欢迎一个比我引用的更相关的例子。我对覆盖toString() 更乐观,比如enum。我专注于解释问题中提到的(假定的)结果。您能详细说明其中的陷阱吗?
  • 不是一个真正的陷阱,除了即使在生产代码中我也敢定期更改toString 方法以提供更好的信息(例如在记录器中打印更多信息)。在这种情况下,通过使用默认渲染器/编辑器等自定义渲染器/编辑器对该方法的隐藏依赖可能会破坏 UI。而且我的 IDE 永远不会发现在渲染器中使用了 toString
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 2019-11-15
  • 2010-10-19
  • 2017-01-24
相关资源
最近更新 更多