import groovy.swing.SwingBuilder class StreckenCategory { static def getKm(selbst) { selbst } static def getM(selbst) { selbst / 1000 } } def werteAus(string) { def km = evaluate(parse(string)) as String def formatierteKm = formatiere(km) "${formatierteKm} km" } def parse(string) { string .replaceAll(/(\d+),(\d+)/, { alle, km, m -> "${km}.${m}" }) .replaceAll(/ (k*m)/, { alle, km -> ".${km}"}) } def formatiere(string) { string.replaceAll(/(\d+).(\d+)/, { alle, km, m -> "${km},${m}" }) } use (StreckenCategory.class) { assert '20,5 km' == werteAus('2 * 2 km + 6 * 300 m + 5 * 100 m + 14,2 km') } def swing = new SwingBuilder() def frame = swing.frame(title:'Kilometerfresser') { textField(columns:100, actionPerformed: { event -> use (StreckenCategory.class) { event.source.setText(werteAus(event.source.text)) } }) } frame.pack() frame.show()