【问题标题】:How to render my own class correctly in a JComboBox?如何在 JComboBox 中正确呈现我自己的类?
【发布时间】:2013-09-19 17:36:56
【问题描述】:

我想使用 DefaultComboBoxModel 填充 JComboBox。

static JComboBox<Carta> cmb_cartas;
static DefaultComboBoxModel<Carta> mdl_cartas;

我用我自己的类“Carta”的 ArrayList 填充 DefaultComboBoxModel

ArrayList<Carta> cartas = conOAD.getCartasPorAgregar(idConjunto);

mdl_cartas = new DefaultComboBoxModel<Carta>();

for(int i = 0; i < cartas.size(); i++) {
    Carta carta = cartas.get(i);
    mdl_cartas.addElement(carta);
}
cmb_cartas = new JComboBox<>(mdl_cartas);

组合框已正确填充,但问题是选项的文本显示:“modelos.Carta@3e7e084e”

如何将文本设置为我的类“Carta”的属性“nombre”?

【问题讨论】:

  • 请避免使用匈牙利符号。您应该将组合框命名为cartasComboBox 和模型cartasModel。

标签: java swing class jcombobox


【解决方案1】:

您可以为您的 Carta 类覆盖 toString 方法。

@Override
public String toString() {
  return this.nombre; // assumes nombre is a string
}

但是,许多人(正确地)不赞成滥用toString 方法来进行 GUI 显示。您可以改为创建自定义 ListCellRenderer 来为每个对象呈现您想要的文本。

【讨论】:

  • 一种更灵活的解决方法是实现ListCellRenderer 并将其设置为组合框。 “灵活”是指它可能在一个渲染器中返回类的字符串形式,但在其他渲染器中返回不同的东西。
  • 对不起,您刚刚说过:覆盖toString 用于显示目的的方法不正确。这是一种简单但不正确的方法。
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 2011-06-04
  • 2019-03-31
  • 1970-01-01
  • 2017-11-03
  • 2010-09-09
  • 2011-07-21
  • 2014-08-25
相关资源
最近更新 更多