Groovy Swing アプリケーションでは、次のような教師を表すクラスがあります。
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 に教師の名前 (名詞付き) を他の特定の値と共に表示します。CRUD操作を実行するために、それらのいくつかをテーブルに表示し、残りをJDialogウィンドウに表示するというアイデアがあります。
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() は、データベースからすべての教師を取得するために使用するメソッドです。2 番目の列 (それ) は Docente インスタンス自体であり、予想どおり、toString() メソッドを呼び出す nombre プロパティが表示されます。オブジェクトの他のプロパティを取得する必要があるときはいつでも、このテーブルの 2 番目の列を取得するのが便利だと思うので、これを行います。
ここで、別のユーザー インターフェイスで、これらの教師を 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() 行に到達すると、オーバーライドされた toString() が使用され、デフォルトの出力ストリームに「no entiendo」が表示されます。しかし、JList を見ると、元の toString() が表示されます。ここで何が欠けていますか?
ヒントをいただければ幸いです。
ありがとう、
エドゥアルド。