© 1999-2003, Flemming Koch Jensen
Alle rettigheder forbeholdt
Borders

 

 

  Man kan placere ethvert JComponent i en ramme, eller border. Specielt forbedres det visuelle indtryk, hvis man laver en border omkring et panel der indeholder en række komponenter. På den måde kan man udtrykke en sammenhæng mellem komponenterne.
  Følgende figur giver et indtryk af hvilke borders Swing tilbyder:
Figur 1:
Forskellige former for borders
  Vi vil i det følgende gennemgå de forskellige former for borders.
  Hver border er en instans af en klasse, som implementerer interfacet Border:
Figur 2:
Klasse-hierarkiet for de forskellige borders
  Med CompoundBorder og TitledBorder kan man lave nestede borders. Man bemærker at to af border-klasserne nedarver fra andre border-klasser.
 

 

1. Hvordan man "sætter" en border

  JComponent har en metode:
void setBorder( Border border )
  der anvendes til at sætte en border for det pågældende komponent.
  Det er sjældent man anvender den i forbindelse med andre komponenter end JPanel. Følgende kode.stykke illustrerer hvordan man kan sætte en BevelBorder for et panel.
Source 1:
At "sætte" en border
JPanel panel = new JPanel();
panel.setLayout( new FlowLayout() );
panel.add( new JLabel( "Sætter border" ) );
panel.setBorder( new BevelBorder( BevelBorder.RAISED ) );

getContentPane().add( panel );
  Hvis framen kun indeholder dette panel, får den følgende udseende:
Figur 3:
"Sætter" border
 

 

Vi vil nu gennemgå de otte border-klasser.

 

 

2. BevelBorder og SoftBevelBorder

Skråning Bevel betyder skråning på dansk. Rammen giver det visuelle indtryk, at det område som den indeholder, enten er sænket eller løftet ud fra det omkringliggende.
  Der findes to klasser til at lave sådanne bevel-rammer: BevelBorder og SoftBevelBorder. Den første har kantede hjørner, mens den sidste har afrundede hjørner. Jeg har selv svært ved at se forskellen, og man skal sikkert ned i en relativ lav opløsning for at får glæde af den
Figur 4:
Skrånende rammer
  I hver af de fire paneler, der her viser de fire mulige rammer, indeholder et label der beskriver konstruktor-kaldet der laver dem. De to konstanter:
BevelBorder.RAISED
BevelBorder.LOWERED
  bestemmer om rammes indhold sænkes (LOWERED) eller hæves (RAISED) i forhold til det omkringliggende.
 

 

3. LineBorder

  Den mest simple form for ramme er naturligvis en streg, der tegner et rektangel. LineBorder er en sådan ramme, og den eneste variationsmulighed er, at man kan bestemmer liniens tykkelse.
Figur 5:
Linie-rammer
  I eksemplet har vi valgt først af bruge den konstruktor, som ikke tager nogen angivelse af tykkelsen som parameter. Default-tykkelsen er 1 pixel. I den anden har vi tilføjet en tykkelse på 5 pixels.
 

 

4. EtchedBorder

  Etched betyder raderet på dansk. Den er min favorit-ramme - enkel og elegant.
Figur 6:
Raderede rammer
  Konstruktoren tager en konstant analog til dem fra BevelBorder, men her er de erklæret i EtchedBorder:
EtchedBorder.RAISED
EtchedBorder.LOWERED
 

 

5. MatteBorder

  Med MatteBorder har man to muligheder:
Figur 7:
Matte rammer
Enten kan man lave en ramme med en linie af varierende tykkelse, fuldstændig i som LineBorder, eller man kan tegne med et icon. Iconet bliver tiled, og dækker det områder som stregen ellers ville dække. Det siger sig selv, at denne mulighed gør sig bedst med en relativ tyk streng.
Icon Iconet, der her er anvendt, er taget fra billedet af undertegnede fra Forordet.
  Efter min mening den grimmeste border, men det kommer måske an på iconet.
 

 

6. EmptyBorder

  Det er for meget med et eksempel på EmptyBorder. Den er så enkel at det gør ondt. Dens eneste betydning er at den laver padding omkring et komponent. Konstruktorerne er følgende:
EmptyBorder( Insets insets )
EmptyBorder( int top, int left, int bottom, int right )
  Da der er tale om padding er det kun naturligt at konstruktoren enten tager en Insets eller de samme parametre som konstruktoren til Insets tager. Vedrørende Insets henvises der til afsnittet og GridBagLayout i kapitlet om Layout Managere.
 

 

7. TitledBorder

  Man ser mange rammer der har en titel tilknyttet. Titlen beskriver hvad der er i rammen. Eftersom det er nyttigt at samle komponenter der har en vis sammenhæng i en ramme, er det kun naturligt at man samtidig giver rammen titel der udtrykker denne sammenhæng.
  Man kan give enhver border en titel. Da der er mange mulige placeringer af en sådan titel vil vi indskrænke os til at se mulighederne for en enkelt border: EtchedBorder (LOWERED)
  Følgende figur illustrerer de mulige placeringer af titlen:
Figur 8:
Rammer med titel
  Man angiver den ønskede placering som parameter til konstruktoren. TitledBorder har følgende konstruktorer:
TitledBorder( Border border )
TitledBorder( Border border, String title )
TitledBorder( Border border, String title, int justification, int position )
TitledBorder( Border border, String title, int justification, int position,
              Font font )
TitledBorder( Border border, String title, int justification, int position,
              Font font, Color color )
TitledBorder( String title )
  Det er position der er varieret i figuren ovenfor. Den skal være en af konstanterne:
TitledBorder.DEFAULT_POSITION
TitledBorder.ABOVE_BOTTOM
TitledBorder.TOP
TitledBorder.BELOW_TOP
TitledBorder.ABOVE_BOTTOM
TitledBorder.BOTTOM
TitledBorder.BELOW_BOTTOM
  DEFAULT_POSITION afhænger af PLAF. De andre navne genkendes fra figuren ovenfor.
  justification bestemmer om titlen er højre-/venstre-stillet eller centreret
  Med positionen TitledBorder.TOP får man følgende tre muligheder udseender:
Figur 9:
justifi-cation
 

 

8. CompoundBorder

  Med CompoundBorder er det muligt at placere to borders inden i hinanden. Mulighederne er utallige og vil vil derfor indskrænke os til nogle få eksempler.
Figur 10:
Sammensatte borders
  Det skal indrømmes at ingen af disse er særlig kønne. Den med en EmptyBorder, illustrerer den primære anvendelse for CompoundBorder, nemlig at man tilføjer en border, og samtidig ønsker at indstille padding. I eksemplet er der tale om intern padding i forhold til EtchedBorder, normalt vil man vælge at placere EmptyBorder yderst.
  CompoundBorder har følgende konstruktorer:
CompoundBorder()
CompoundBorder( Border outer, Border inner )
  Default-konstruktoren sætter de to borders til null. Det er lidt en gåde hvad den skal bruges til, da CompoundBorder ikke har nogen set-metoder.
  Set-konstruktoren tager de to borders som parametre.