/* * Custom Implementation of GridPanel using HBox-VBox. * * Author: Praveen Mohan, JavaFX Graphics SQE */ import javafx.ext.swing.*; import javafx.scene.effect.*; import javafx.scene.*; import javafx.scene.paint.*; import javafx.scene.image.*; import javafx.scene.transform.*; import javafx.scene.text.*; import javafx.scene.shape.*; import javafx.scene.effect.*; import javafx.scene.input.*; import javafx.stage.*; import java.lang.System; import javafx.scene.layout.*; import javafx.geometry.*; import javafx.scene.control.*; public class GridPanel extends CustomNode { public var rows: Integer; public var columns: Integer; public var content: Node[] on replace { populateVBox(); }; var vbox: VBox; function populateVBox() { if (vbox == null) { vbox = VBox{ spacing: 5 }; }; for (cont in vbox.content) { var h = cont as HBox; delete h.content; } delete vbox.content; var x: Integer = 0; var y: Integer = 0; var hbox: HBox = HBox{ spacing: 5 }; for (cont in content) { if (cont instanceof ListView) { cont.layoutInfo = LayoutInfo { width: 120 height: 50}; } else { cont.layoutInfo = LayoutInfo { width: 120 }; } if (x < columns) { insert cont into hbox.content; x ++; } else { insert hbox into vbox.content; if (y >= rows) { break; } y++; x = 1; hbox = HBox{ spacing: 5 }; insert cont into hbox.content; } } insert hbox into vbox.content; } override function create(): Node { populateVBox(); return vbox; } }