在一个时髦的摇摆应用程序中,我有一个代表以下教师的课程:
Docente.groovy
public class Docente {
String codigo
String nombre
String apellidoPaterno
String apellidoMaterno
String direccion
String tipoDocumento
String sexo
String telefono
String correo
String toString() {
nombre
}
}
我使用toString方法在JTable中显示教师名称(带有nombre)以及某些其他值。这个想法是在桌子上显示其中一些,其余的在JDialog窗口上显示,以便执行儿子CRUD操作。
假设sw是groovy的SwingBuilder对象的实例,并且grdDocentes是JTable的id,我使用以下代码填充该表:
DocentesUI.groovy
...
def tm = sw.grdDocentes.model
tm.rowCount = 0
def doc = DocenteDespachador.obtenerDocentes()
doc.each {
tm.addRow([it.codigo, it, it.apellidoPaterno, it.apellidoMaterno] as Object[])
}
...
ObtenerDocentes()是用于从数据库中获取所有教师的方法。第二列(它)是Docente实例本身,并且正如预期的那样,它显示调用toString()方法的nombre属性。我这样做,因为我发现只要获得对象的其他属性,就可以方便地获取此表的第二列。
现在,在另一个用户界面上,我想在JList中显示这些教师,但格式不同。这是metaClass的用武之地。在这个其他界面中,我想覆盖我的Docente类上的toString()。所以,为此,我使用以下内容:
AsignarDocenteUI.groovy
...
def model = sw.lstDocentesDisponibles.model
Docente.metaClass.toString = {
return "No entiendo"
}
def docentes = DocenteDespachador.obtenerDocentes()
docentes.each {
println it.toString()
println it
model.addElement it
}
...
这里,lstDocentesDisponibles是JList的id。当代码到达println it.toString()行时,它使用overriden toString()并向默认输出流显示“no entiendo”。但是,当我查看JList时,会显示原始的toString()。我在这里缺少什么?
任何提示都表示赞赏。
谢谢,
爱德华。
答案 0 :(得分:0)
我敢打赌:JList不会通过metaClass。装饰模型怎么样?
class DocenteForJList {
Docente docente
String toString() { docente.with { "$nombre ($codigo)" } }
}
def docentes = DocenteDespachador.obtenerDocentes()
docentes.each {
model.addElement new DocenteForJList(docente:it)
}