B4J Question JavaFX Custom Control Access Methods

Discussion in 'B4J Questions' started by rwblinn, Apr 21, 2015.

  1. rwblinn

    rwblinn Well-Known Member Licensed User


    developed (in java) my first working [not easy must say = sweat]) JavaFX Custom Control TextFieldNowWidget: An Anchorpane with a Label, TextField and Button (to set the actual date + time in the TextField). Methods defined are setLabel(String s), getText, getVersion.
    1) Exported the Custom Control TextFieldNowWidget to a jar and copied to the B4J external libraries folder.
    2) Build a B4J wrapper jTextFieldNowWidget for this Custom Control and copied to the B4J external libraries folder.
    3) created a sample app in B4J using TextFieldNowWidget (added as additional jar) and jTextFieldNowWidget (added as a Lib).
    To access TextFieldNowWidget in B4J, defined:
    Sub Process_Globals
    Private textfieldnowwidget1 As Node

    'Get the text from the inputfield
    'Not found a way yet to directly access the methods by using textfieldnowwidget1.method, like textfieldnowwidget1.getText
    Sub btnGetText_Action
    Dim jo As JavaObject = textfieldnowwidget1
       lblGetText.Text = jo.RunMethod(
    'JUST for a Test Log(jo.RunMethod("getVersion", Null))
    End Sub
    Instead of using a JavaObject to access the TextFieldNow methods, like getText is there a way to use textfieldnowwidget1.getText?
    What do I need to change in the Wrapper?

    Pls find code attached.

    Attached Files:

  2. Erel

    Erel Administrator Staff Member Licensed User

    Why have you created two jars? Can't you create one jar with xml and use it directly?
  3. rwblinn

    rwblinn Well-Known Member Licensed User

    Hi Erel,

    one jar is used for the JavaFX Scenebuilder (imported as Custom Control) and java apps using that custom control.
    the other is a B4J wrapper (jar + xml) using that library (referenced in the eclipse project). The B4J wrapper shows only the standard node methods, but not the ones defined in the wrapper.
    Something I do wrong or miss to include only the Custom Control methods. But do not know how to resolve?
  4. Erel

    Erel Administrator Staff Member Licensed User

    This code is taken from WebViewWrapper:
    static {
         //This line ties the native 
    WebView with this wrapper. It is required for the integration with Scene Builder (FXML layouts).
         PaneWrapper.nativeToWrapper.addFirst(new NativeAndWrapper(
    WebView.class, WebViewWrapper.class));
    You need to add a similar static constructor to your class if you want that your class will be instantiated during the layout building process.

    The following method will be called:
    public void innerInitialize(final BA ba, final String eventName, boolean keepOldObject) {
    if (!keepOldObject)
         super.innerInitialize(ba, eventName, 
    if (ba.subExists(eventName + "_locationchanged")) {
           getObject().getEngine().locationProperty().addListener(new ChangeListener<
    String>() {

    public void changed(ObservableValue<? extends String> arg0,
    String arg1, String arg2) {
               ba.raiseEventFromUI(getObject(), eventName + 
    "_locationchanged", arg2);
         if (ba.subExists(eventName + "_pagefinished")) {
           getObject().getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {

             public void changed(ObservableValue<? extends State> arg0,
                 State arg1, State arg2) {
               if (arg2 == State.SUCCEEDED) {
                 ba.raiseEventFromUI(getObject(), eventName + "_pagefinished", getObject().getEngine().getLocation());
  5. rwblinn

    rwblinn Well-Known Member Licensed User

    Thanks for feedback.

    Explored further on how to create JavaFX Custom Controls and use these in B4J - afterall not that difficult.

    For those interrested, two comprehensive JavaFX Custom Control examples (using Eclipse & B4J) developed while learning:
    TextFieldClear with B4J Wrapper: here
    TextFieldNow with B4J Wrapper: here
    Erel likes this.
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice