Javafx Griffon groovyfx控制器访问

Javafx Griffon groovyfx控制器访问,javafx,griffon,groovyfx,Javafx,Griffon,Groovyfx,JavaFX场景的真正新手,现在开始 griffon 1.4.0-jdk 1.7.0_45 griffon插件(groovyfx-0.9.1、javafx-0.10.0) 我正在尝试为我的一个文本字段实现一个简单的焦点侦听器。这个想法是,一旦文本字段被聚焦,我想在同一个视图中更改标签的消息。我相信答案很简单,但我认为我的问题太复杂了 对于整个上下文,我试图通过读取fxml并使用groovy视图进行绑定等方式来实现我的视图 application(title: 'Myapp', sizeToSce

JavaFX场景的真正新手,现在开始

griffon 1.4.0-jdk 1.7.0_45

griffon插件(groovyfx-0.9.1、javafx-0.10.0)

我正在尝试为我的一个文本字段实现一个简单的焦点侦听器。这个想法是,一旦文本字段被聚焦,我想在同一个视图中更改标签的消息。我相信答案很简单,但我认为我的问题太复杂了

对于整个上下文,我试图通过读取fxml并使用groovy视图进行绑定等方式来实现我的视图

application(title: 'Myapp', sizeToScene: true, resizable: false, centerOnScreen: true) {
scene(fill: WHITE) {
    fxml(app.getResourceAsURL('fxtemplates/login.fxml').text) {
         // my bindings and onActions ( which are working great ) go in here
}
看看groovyfx文档,似乎没有像onAction这样的onFocus方法,所以我必须向focusedProperty添加一个侦听器——非常好。我首先尝试为ChangeListener编写一个闭包:

aTextField.focusedProperty().addListener({ obsVal, oldVal, newVal ->
       // do something...    
})
但优步建筑商抱怨了,我显然做错了(朝这个方向轻推会有帮助)

所以我编写了一个空的FocusListener类,它实现了一个ChangeListener,然后在我的视图中绑定了它

class FocusListener implements ChangeListener<Boolean> {

@Override
public void changed(ObservableValue<? extends Boolean> observableValue, Boolean oldVal, Boolean newVal ) {
    // for the view to override...
}

}
类FocusListener实现ChangeListener{
@凌驾

公共空间发生了变化(ObservalEvalueOk-所以在进行了更多的修补之后(运行良好)。这很容易

在视图中,我向textfield的focusedProperty添加了一个侦听器。该侦听器在模型中被引用,因此:

aTextField.focusedProperty().addListener(model.fieldFocusListener)
然后在模型中,我对已经绑定的值进行更改

@FXBindable String field_one
@FXBindable String field_two
@FXBindable String message

//...

ChangeListener fieldFocusListener

void mvcGroupInit(Map args) {

    fieldFocusListener = new ChangeListener() {
        @Override
        void changed(ObservableValue observableValue, Object t, Object t1) {
           this.setMessage('your message here')
        }
    }

}

这对我在模型中完全有意义,因为我拥有操纵视图所需的所有访问权限。无论如何,我希望这能帮助其他有需要的人。

好的-在进行更多的修补(以及良好的运行)之后。这很容易

在视图中,我向textfield的focusedProperty添加了一个侦听器。该侦听器在模型中被引用,因此:

aTextField.focusedProperty().addListener(model.fieldFocusListener)
然后在模型中,我对已经绑定的值进行更改

@FXBindable String field_one
@FXBindable String field_two
@FXBindable String message

//...

ChangeListener fieldFocusListener

void mvcGroupInit(Map args) {

    fieldFocusListener = new ChangeListener() {
        @Override
        void changed(ObservableValue observableValue, Object t, Object t1) {
           this.setMessage('your message here')
        }
    }

}

这对我在模型中完全有意义,因为我拥有操纵视图所需的所有访问权限。无论如何,我希望这能帮助其他有需要的人。

如果您执行操作而不是创建ClosureMethod,您的上一个示例应该可以工作。syntax对象。&methodName用于创建闭包,因此您不会调用ac操作。如果您执行操作,而不是从中创建ClosureMethod,则上一个示例应该可以运行。语法对象。&methodName用于创建闭包,因此您不会调用该操作。
@FXBindable String field_one
@FXBindable String field_two
@FXBindable String message

//...

ChangeListener fieldFocusListener

void mvcGroupInit(Map args) {

    fieldFocusListener = new ChangeListener() {
        @Override
        void changed(ObservableValue observableValue, Object t, Object t1) {
           this.setMessage('your message here')
        }
    }

}