UI-componenten
Elk onderdeel van een bedrijfsscherm, Klaar in Java.
webforJ is het full-stack Java-framework voor zakelijke webapps: je bouwt de volledige app, inclusief schermen, in Java. De componenten omvatten lay-out, gegevensinvoer, dialogen, gegevensweergave en feedback. Elk onderdeel is een Java-klasse die je maakt, configureert en aan een lay-out toevoegt.
- Componenten in de galerij
- 57
- Getypeerde HTML-elementen
- 29
- Ingebouwde thema's
- 3
- Groepen per doel
- 5
Op doel
Kies een groep en daarna een component. Elke tegel opent de eigen pagina van die component in de documentatie.
Indeling
De structuur van een scherm: app-shells, werkbalken, flex- en kolomindelingen, gesplitste deelvensters en oppervlakken.
8 componenten

AppLayoutEen gestructureerde indeling voor hoofdnavigatie en app-inhoud.
FlexLayoutRangschikt onderliggende elementen met flexboxregels voor responsieve uitlijning.
ColumnsLayoutZet onderliggende elementen in kolommen, handig voor formulieren en rasterstructuren.
ToolbarEen horizontale container voor actieknoppen, pictogrammen en andere bedieningselementen.
SplitterVerdeelt de ruimte tussen twee componenten die gebruikers kunnen aanpassen door te slepen.
AccordionEen gestapelde reeks inklapbare panelen met aanklikbare koppen.
CardEen vlak met secties voor media, kopteksten, hoofdinhoud en voetteksten.
DialogEen modaal venster dat over de inhoud verschijnt en de gebruiker om invoer vraagt.
Formulieren en invoervelden
Alles wat een gebruiker invoert, selecteert of uploadt: van tekst en cijfers tot datums, invoermaskers, lijsten en bestanden.
20 componenten

TextFieldEen eenregelig invoerveld om tekst in te voeren en te bewerken.
MaskedTextFieldBeperkt tekst tot een patroon, zoals een telefoonnummer.
NumberFieldEen numeriek invoerveld met knoppen om de waarde te verhogen of te verlagen.
MaskedNumberFieldDwingt een getalnotatie af, zoals valuta of percentages.
PasswordFieldEen invoerveld met één regel dat wachtwoorden maskeert.
DateFieldEen datumkiezer in een invoerveld in de browser.
MaskedDateFieldEen datumveld dat een vastgelegd datumformaat afdwingt.
TimeFieldEen browsergebaseerde tijdkiezer in een invoerveld.
MaskedTimeFieldEen tijdinvoer die een gedefinieerde tijdnotatie afdwingt.
DateTimeFieldSelecteert een datum en tijd in één invoerveld.
ColorFieldEen browsergebaseerde kleurkiezer in een invoerveld.
TextAreaEen invoerveld met meerdere regels voor grotere tekstblokken.
CheckBoxEen binaire optie die wisselt tussen aangevinkt en niet aangevinkt.
RadioButtonSelecteert één optie uit een groep elkaar uitsluitende opties.
SwitchSchakelt met een schuifbeweging tussen twee standen, zoals aan en uit.
ChoiceBoxEen keuzelijst met vooraf gedefinieerde opties.
ComboBoxEen keuzelijst gecombineerd met een bewerkbaar tekstveld.
ListBoxEen scrollbare lijst om een of meer items te selecteren.
SliderSelecteert een waarde binnen een bereik door een schuifknop over een spoor te slepen.
UploadEen inline bestandskiezer met slepen en neerzetten, filters en gebeurtenissen per bestand.
Gegevens en inhoud
Toon records, hiërarchieën, grafieken en gestreamde tekst, en laad meer terwijl de gebruiker scrolt.
8 componenten

GoogleChartsGrafieken en visuele gegevensweergaven via Google Charts.
TreeHiërarchische gegevens die gebruikers kunnen uit- en inklappen en waarmee ze kunnen werken.
InfiniteScrollLaadt meer items bij het scrollen en houdt bij wanneer alle inhoud is opgehaald.
RefresherEen pull-to-refresh-interactie binnen scrollbare containers.
MarkdownViewerGeeft Markdown geleidelijk weer, ideaal voor AI-chat en tekststreaming.
TerminalEen opdrachtregelinterface in de app voor tekstcommando's.
AvatarProfielfoto's of initialen in verschillende formaten, vormen en thema's.
BadgeEen klein label voor aantallen, statussen of korte metadata.
Feedback en dialoogvensters
Vertel gebruikers wat er gebeurt, vraag om bevestiging en verzamel een waarde, bestand of inloggegevens.
12 componenten

ToastEen niet-blokkerende melding die vanzelf verdwijnt.
AlertBelangrijke berichten of waarschuwingen in een opvallende opmaak.
DesktopNotificationAangepaste desktopmeldingen via de Notification API van de browser.
ProgressBarEen balk die wordt gevuld naarmate een taak vordert.
BusyIndicatorEen appbrede indicator dat een globaal proces actief is.
LoadingEen laadindicator voor één bovenliggende component.
SpinnerEen draaiende animatie die aangeeft dat een actie wordt uitgevoerd.
MessageDialogEen informatief bericht dat de gebruiker met OK bevestigt.
ConfirmDialogVraagt de gebruiker een actie te bevestigen of te annuleren.
InputDialogVraagt de gebruiker om een waarde met OK en Annuleren.
FileUploadDialogUploadt bestanden vanaf het lokale bestandssysteem naar de app.
LoginEen kant-en-klare inloginterface met gebruikersnaam, wachtwoord en verzendknop.
Samenstelling
Je eigen componenten, gebouwd met die van ons.
webforJ gebruikt compositie boven overerving. Je breidt een Button niet uit. Je schrijft een klasse die Composite uitbreidt, componenten erin combineert en bepaalt welke methoden de rest van je app kan zien.
public class SearchBar extends Composite<FlexLayout> {
private final FlexLayout self = getBoundComponent();
private TextField searchField;
private Button searchButton;
public SearchBar() {
searchField = new TextField("Search");
searchButton = new Button("Go");
self.setDirection(FlexDirection.ROW)
.add(searchField, searchButton);
}
}
Eén klasse, één eenheid.
Een
Compositeomvat één gebonden component en bevat je interne structuur, zodat een zoekbalk, adresformulier of volledige dashboardkaart één herbruikbare klasse wordt.Jij kiest de API.
Aanroepers zien alleen de methoden die u beschikbaar stelt, in tegenstelling tot overerving, waarbij alles zichtbaar is.
Ingebouwde componenten blijven intact.
De ingebouwde componenten zijn final, waardoor de onderliggende webcomponent consistent en voorspelbaar blijft. Je gedrag voeg je eromheen toe, niet erin.
Buiten de verzameling
Niet in de set? Gebruik een component naar keuze op het web.
De bedrijfscomponenten zijn het begin, niet het eindpunt. Elk HTML-element is een Java-klasse en elk webcomponent kan dat ook worden.
- 29 HTML-elementen
De pagina zelf, getypt
webforJ levert componenten die rechtstreeks overeenkomen met standaard HTML-elementen, zoals Div, Paragraph, de koppen, lijsten, Img en Anchor, met een getypeerde Java-API.
HTML-componenten - Webcomponenten
Elke webcomponent, verpakt
ElementComposite omhult een aangepast HTML-element of een webcomponent van derden en stelt de eigenschappen, attributen en gebeurtenissen beschikbaar via de Java-API.
Samengesteld element - npm-pakketten
Het npm-register, vanuit Java
De frontendbundler zet annotaties op een klasse om in gecompileerde frontend-assets, zodat een component het npm-pakket kan meeleveren waarvan het afhankelijk is.
Frontend-bundler
Je ontwerpsysteem
Heb je een eigen designsysteem? Neem het mee.
De webforJ-componenten zijn optioneel, geen vereiste. Als je designsysteem als webcomponenten wordt geleverd, hoef je er maar één keer een wrapper omheen te bouwen en kun je de hele app ermee bouwen in Java.
- 01
Componenten omhullen
ElementCompositezet elk aangepast element om in een Java-klasse en stelt de eigenschappen, attributen en gebeurtenissen ervan beschikbaar via de Java-API. - 02
Lever ze als één module
Met de frontendbundler kan een klasse de benodigde npm-pakketten declareren, zodat wrappers hun designsysteem meenemen. Een app hoeft alleen de dependency toe te voegen.
- 03
Bouw de app zoals gebruikelijk
Routing, beveiliging en databinding werken op dezelfde manier. Een ingepakte component die
ValueAwareimplementeert, wordt net als elk ingebouwd veld aan je model gekoppeld.
Je schermen behouden de uitstraling die je bedrijf al heeft ontworpen. Het framework eronder is nog steeds webforJ.
Gebruikt vanuit Java
Een component is een object je maakt met new.
Je stelt de status in met getypeerde methoden, luistert met lambda’s naar gebeurtenissen en voegt het toe aan een container. Het scherm bestaat uit Java-code, zonder sjabloon dat synchroon moet blijven.
FlexLayout container = new FlexLayout();
container.add(new Button("Click Me"));
TextField nameField = new TextField("Name");
TextField emailField = new TextField("Email");
Button submitButton = new Button("Submit");
container.add(nameField, emailField, submitButton);
// Reveal an additional field when a checkbox is checked
TextField advancedField = new TextField("Advanced setting");
advancedField.setVisible(false);
CheckBox enableAdvanced = new CheckBox("Show advanced settings");
enableAdvanced.addValueChangeListener(e -> advancedField.setVisible(e.getValue()));
// Enable a button only when the required field has a value
Button submitButton = new Button("Submit");
submitButton.setEnabled(false);
TextField nameField = new TextField("Name");
nameField.addValueChangeListener(e -> submitButton.setEnabled(!e.getValue().isBlank()));
Thema's
Eén ontwerpsysteem achter elk component.
webforJ wordt geleverd met een designsysteem genaamd DWC. De CSS-variabelen, de designtokens, bevatten kleuren, typografie, randen en tussenruimte, en elk component leest ze uit. Pas een token aan en elk component dat het gebruikt volgt die wijziging.
Hetzelfde veld, dezelfde knoppen, schakelaar, badge en voortgangsbalk in het lichte thema.
lightDe standaard. Lichte achtergrond, subtiele tint in de primaire kleur.Hetzelfde veld, dezelfde knoppen, schakelaar, badge en voortgangsbalk in het donkere thema.
darkDonkere achtergrond, subtiele tint van de primaire kleur.Drie ingebouwde thema's
light, dark en dark-pure, waarbij de primaire tint wordt weggelaten voor puur neutrale grijstinten. Schakel tijdens runtime met App.setTheme(), zonder opnieuw te bouwen.
Volgt het besturingssysteem
Registreer een licht en donker thema en geef "system" door. webforJ kiest het thema dat past bij de voorkeur van de gebruiker en schakelt over wanneer die verandert.
@AppTheme("system")
@AppLightTheme("light")
@AppDarkTheme("dark")
class MyApp extends App {
// app code
}
Geef je merk een nieuwe look met een paar tokens
Overschrijf de seed-tokens van de ingebouwde thema’s, zodat elk component de nieuwe uitstraling krijgt. Shadow parts bieden toegang tot een component wanneer een token niet volstaat.
:root {
--dwc-color-primary-seed: #6366f1;
--dwc-font-size: var(--dwc-font-size-l);
}
De galerij
Galerij openen en bekijk alle 57.
De galerij in de documentatie toont elk component met een voorbeeld en een korte beschrijving, in dezelfde vier secties als de documentatie.









