Start · Sprachen · PHP · Referenz · UI\Controls\Grid

UI\Controls\Grid

Klasse

Ein <code>Grid</code>-Control ermöglicht die Anordnung von Kindelementen in einem zweidimensionalen Raster innerhalb einer UI-Anwendung.

seit PHP 0.9.9 Kategorie: misc

Signatur

class UI\Controls\Grid extends UI\Control

Beschreibung

UI\Controls\Grid ist ein Layout-Control aus der PHP-UI-Erweiterung (pecl/ui), das es ermöglicht, andere Controls in Zeilen und Spalten eines Rasters zu platzieren. Damit lassen sich strukturierte, tabellenartige Layouts für Desktop-Anwendungen erstellen, die auf libui aufbauen.

Kindelemente werden über die Methode append() dem Grid hinzugefügt. Dabei werden Position (Spalte, Zeile), Größe (Spaltenspanne, Zeilenspanne), Ausrichtung (UI\Align-Konstanten) sowie das Dehnverhalten (expand) für horizontale und vertikale Richtung festgelegt.

Das Grid eignet sich besonders für Formularlayouts oder strukturierte Eingabemasken, bei denen Labels und Eingabefelder übersichtlich nebeneinander oder untereinander ausgerichtet werden sollen. Im Gegensatz zu einfacheren Containern wie Box erlaubt das Grid eine präzise zweidimensionale Positionierung.

Da UI\Controls\Grid von UI\Control erbt, kann es wie jedes andere Control in übergeordnete Container eingefügt oder direkt als Inhalt eines UI\Window verwendet werden.

Beispiele

Einfaches Formular-Layout mit Grid

<?php
use UI\Window;
use UI\Controls\Grid;
use UI\Controls\Label;
use UI\Controls\Entry;
use UI\Align;

$window = new Window('Grid-Beispiel', 400, 200, false);

$grid = new Grid();

$labelName = new Label('Name:');
$entryName = new Entry();

$labelEmail = new Label('E-Mail:');
$entryEmail = new Entry();

// append(Control $child, int $left, int $top, int $xspan, int $yspan,
//        bool $hexpand, int $halign, bool $vexpand, int $valign)
$grid->append($labelName,  0, 0, 1, 1, false, Align::Fill,  false, Align::Center);
$grid->append($entryName,  1, 0, 1, 1, true,  Align::Fill,  false, Align::Fill);
$grid->append($labelEmail, 0, 1, 1, 1, false, Align::Fill,  false, Align::Center);
$grid->append($entryEmail, 1, 1, 1, 1, true,  Align::Fill,  false, Align::Fill);

$window->add($grid);
$window->show();

UI\run();

Grid mit mehrspaltigen Elementen (colspan)

<?php
use UI\Window;
use UI\Controls\Grid;
use UI\Controls\Label;
use UI\Controls\Entry;
use UI\Controls\MultilineEntry;
use UI\Align;

$window = new Window('Kontaktformular', 450, 300, false);

$grid = new Grid();
$grid->setPadded(true);

$lblName    = new Label('Name:');
$entryName  = new Entry();
$lblMessage = new Label('Nachricht:');
$textArea   = new MultilineEntry();

// Name-Zeile: Label in Spalte 0, Entry in Spalte 1
$grid->append($lblName,    0, 0, 1, 1, false, Align::Fill, false, Align::Center);
$grid->append($entryName,  1, 0, 2, 1, true,  Align::Fill, false, Align::Fill);

// Nachrichtenbereich: Label in Spalte 0, Textarea über 2 Spalten und 3 Zeilen
$grid->append($lblMessage, 0, 1, 1, 1, false, Align::Fill, false, Align::Start);
$grid->append($textArea,   1, 1, 2, 3, true,  Align::Fill, true,  Align::Fill);

$window->add($grid);
$window->show();

UI\run();

// Wichtig · Fallstricke

Erweiterung erforderlich: UI\Controls\Grid ist Teil der experimentellen ui-Erweiterung (pecl/ui), die auf libui basiert. Diese Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat installiert werden.

Die Erweiterung gilt als experimentell; die API kann sich zwischen Versionen ändern. Für Produktionsanwendungen sollte die Stabilität der eingesetzten Version sorgfältig geprüft werden.

Positionsangaben (left, top) beginnen bei 0. Überlappende Kindelemente führen zu undefiniertem Verhalten. Die Methode setPadded(true) fügt einen internen Abstand zwischen den Zellen hinzu und verbessert in der Regel die visuelle Darstellung.