Planet JFX
Register
Advertisement

Summary[]

See this thread in the mailing lists for the evolution of this widget.

This example takes advantage of binding in order to get a rectangle that borders a label. It also makes use of some of the currentXX fields available on Nodes to change information.

Preview

Code[]

import javafx.ui.*;
import javafx.ui.canvas.*;
import javafx.ui.filter.*;

class MyLabel extends CompositeNode
{
    attribute width: Number;
    attribute height: Number;
    attribute text: String;
}

function MyLabel.composeNode() = Group
{
    content:
    [Rect {
        width: bind width
        height: bind height + 10
        stroke: green
        strokeWidth: 3
    },
    View
    {
        size: bind select {width: w-10} from w in width
        transform: translate(5, 5)
        content: Label
        {
            text: bind text
            font: Font {face: VERDANA, style: [ITALIC, BOLD], size: 30}
            foreground: red
        }
        currentHeight: bind height // as currentHeight changes,
        //height will be updated
        }]
};

var label = MyLabel { text: "Hola Mundo", width: 100 };

return Frame {
    visible: true
    content: Canvas {
        content: Group {
            content:
            [label,
            View {
                transform: translate(200, 50)
                
                content: Button {
                    text: "Click Me!"
                    action: operation() {
                        label.text = "Globe trotter";
                    }
                }
            },
            View {
                transform: translate(200, 80)
                
                content: Slider {
                    min: 0
                    max: 200
                    value: bind label.width
                    
                }
            },
            ]
        }
    }
};
Advertisement