2013-02-24 55 views
0

我正在使用Griffon 1.2.0和JavaFX,并且希望将文本字段绑定到一个数字。我认为我可以简单地通过将模型属性定义为Float来完成它,但即使我定义了一个转换器,它似乎也不是那样。我查看了Validator插件,但似乎只适用于Swing(不是JavaFX) - 这很遗憾,因为此演示文稿使其看起来非常好:http://www.slideshare.net/ecspike/introduction-to-griffon(第67页显示了我想要的功能类型)。使用Griffon和JavaFX将文本字段绑定到一个数字

在此期间,我只是在我看来的noparent块添加属性更改侦听的建议在这里What is the recommended way to make a numeric TextField in JavaFX?

amount2.textProperty().addListener({ ObservableValue<? extends String> observable, String oldValue, String newValue -> 
    try { 
     Integer.parseInt(newValue); 
    } catch (Exception e) { 
     observable.setValue(oldValue); 
    } 
} as ChangeListener<String>) 

这将确保用户只能输入数字,但有更好的选择?我在JavaFX领域还没有发现任何与Validation插件功能相媲美的东西 - 我应该放弃JavaFX并回到Swing吗?

回答

0

我认为这个功能会被GroovyFX的@FXBindable和bind()节点已经提供,即

class SampleModel { 
    @FxBindable float number 
} 

// View 
textField(text:bind(target: model, 'number', converter: { v -> /* insert converter code here */)) 

考虑到GroovyFX的bind()是SwingBuilder的绑定的副本()。

+0

我尝试这样 //模型 @FXBindable飘浮试验 //视图 文本字段(文本:绑定(目标:模型, '测试'),转换器:model.convertFloat) 但它与 2013猛烈模具-02-25 11:33:46,614 [AWT-AppKit]错误org.codehaus.griffon.runtime.builder.UberBuilder - 建立moneytracker时发生错误[email protected] groovy.lang.MissingPropertyException:No such property:target for class:groovyx.javafx.binding.BindingHolder # #Java运行时环境检测到致命错误: # #SIGSEGV(0xb)at pc = 0x000000010d9a5425,pid = 6373,tid = 1799 # #JRE版本:7.0_07-b10 – prule 2013-02-25 00:36:34

+0

那么恐怕GroovyFX 0.3.1中有一个bug http://groovyfx.org/ – aalmiray 2013-02-25 11:09:36

相关问题