Avancerade containrar

En bra artikel från SUN om containrar finns här, http://java.sun.com/products/jfc/tsc/articles/containers/index.html.


JSplitPane

En JSplitPane är en container som kan innehålla två komponenter med en avgränsare mellan. Ett typiskt exempel är utforskaren i Windows som har en avgränsare mellan katalogträdet och filerna i aktuell katalog. JSplitPane kan bara innehålla två komponenter, men eftersom den ärver av JComponent går det att placera en split pane i en annan split pane, det kan dock vara svårt att få dem att bete sig riktigt logiskt.

Den första av de angivna komponenterna måste ha en preferredSize, annars kommer den att ta upp hela JSplitPane när den visas första gången. Det går inte att flytta avdelaren så att någon av komponenterna blir mindre än sin minimumSize. Det är därför minimumSize sätts i exemplet. Satte vi inte den skulle textareornas minimumSize sättas till den storlek de får när de först visas, vilket skulle innebära att avdelaren inte gick att flytta. Property orientation sätts till JSplitPane.HORIZONTAL_SPLIT eller JSplitPane.VERTICAL_SPLIT beroende på hur den ska delas. Om property oneTouchExpandable är sann får avdelaren en komponent (pilar i exemplet) som flyttar den mellan ändlägena och startläget.

Här kommer exemplet, SimpleSplitPane.java.

JScrollPane

En JScrollPane används för att skrolla en komponent som är för stor för att visas i sin helhet. Den består av ett huvudfönster omgivet av två scrollbar, kolumnrubrik, radrubrik och fyra hörn, se bilden nedan.

När dess scrollbar ska synas avgörs av två properties, horizontalScrollBarPolicy och verticalScrollBarPolicy. De tillåtna värdena (alltid, aldrig och vid behov) är konstanter i gränssnittet ScrollPaneConstants, se exemplet nedan.

Rubrikerna är objekt av klassen JViewport, se nedan, och sätts med metoderna setColumnHeader() och setRowHeader(). Med setColumnHeaderView() och setRowHeaderView() sätts den java.awt.Component som ska visas i respektive view port, se exemplet nedan.

Även huvudinnehållet ligger i en JViewport som kan sättas med metoden setViewport(). Komponenten som ska skrollas kan ges med metoden setViewportView(). Det är ett objekt av java.awt.Component.

Även objekten i hörnen är av klassen java.awt.Component. De sätts med metoden setCorner(). Vilket hörn det är frågan om anges med konstanter från gränssnittet ScrollPaneConstants, se detta exempel: ScrollDemo.java. Av exemplet framgår hur hörnkomponenternas storlek på verkas av övriga komponenter. Observera dessutom att de inte visas om inte båda angränsande komponenter visas.

Scrollable

En komponent kan styra hur den ska skrollas genom att implementera gränssnittet Scrollable. Det innehåller metoder för att styra till exempel komponentens storlek och hur mycket den ska skrollas åt gången.

JViewport

JViewport ärver av JComponent och innehåller stöd för att visa endast en del av en komponent.

JTabbedPane

JTabbedPane ärver av JComponent och innehåller stöd för att visa ett fönster med flikar, typiskt användningsområde är för någon form av inställningar. En flik läggs till med metoden addTab(). Varje flik kan endast innehålla en java.awt.Component. Vill man lägga in fler komponenter måste de placeras i en container. Här kommer ett litet exempel, SimpleTab.java, av vilket även framgår att tabbar kan ha ikoner och tooltips.

Box och BoxLayout

BoxLayout används till exempel för en JToolBar. Den hanterar utplacering av komponenter i en rad efter varandra, snarlikt en GridLayout med bara en rad eller en kolumn. Till skillnad från GridLayout behöver en komponent inte fylla en cell.

Den använder BoxLayout och är till just för att innehålla en rad med komponenter. Den innehåller statiska metoder för att skapa en horisontell eller vertikal Box. Den har även statiska metoder för att skapa "glue", som är ett elastiskt mellanrum mellan två komponenter, och "strut", som är ett mellanrum med fast storlek. Hur det fungerar syns om du ändrar storlek på fönstret i exemplet GlueStrutBox.java.