![]() |
![]() |
Start på kapittel om spesialiserte komponenter for grafiske brukergrensesnitt |
Hver JComponent
kan ha en eller flere rammer. Rammer
kan brukes til å tegne linjer og kanter av forskjellig type rundt komponenten,
til å utstyre den med en tittel, og til å legge inn tomt rom rundt komponenten.
Rammer er objekter av type
Border
.
Det blir anbefalt at man bare setter ramme på komponenter av type
JPanel
og JLabel
. Dersom en ønsker å sette ramme
rundt en annen type komponent, blir det anbefalt at man legger denne inn i et
JPanel
og så setter ramme på dette panelet.
For å sette ramme rundt en komponent, brukes komponentens
setBorder
-metode med rammeobjektet som parameter. Klassen
BorderFactory
inneholder static
-metoder som
genererer og returnerer objekter av de vanlige rammetypene:
Det er de samme skrittene som må utføres, uansett hvilken type ramme man velger å bruke. Skrittene er som følger:
static
-metode til
BorderFactory
for å få ønsket rammetype.
Eksempel:Border ramme = BorderFactory.createLineBorder(
Color.BLACK );
Border tittelramme = BorderFactory.createTitledBorder(
ramme, "En tittel" );
Border kombiramme = BorderFactory.createCompoundBorder(
ytreRamme, indreRamme );
Border
-objekter
som parametre )komponent.setBorder( ramme );
SoftBevelBorder
.
Klassen
LineBorder
definerer også en variant med avrundede hjørner. For variantene med avrundede hjørner finnes det imidlertid
ingen static
-metode for å opprette rammen.
Isteden må man bruke en av konstruktørene til de to klassene.
BorderTest.java
er det gjengitt kode for nedenfor.
Programmet demonstrerer de forskjellige enkle rammetypene, alle uten
tittel. Når programmet kjøres, starter det opp med vinduet som er vist på
følgende bilde.
1 /** 2 * @version 1.20 27 Jun 1997 3 * @author Cay Horstmann 4 */ 5 import java.awt.*; 6 import java.awt.event.*; 7 import javax.swing.*; 8 import javax.swing.border.*; 9 10 class BorderFrame extends JFrame implements ActionListener 11 { 12 13 private ButtonGroup group; 14 15 public BorderFrame() 16 { 17 JPanel buttonPanel = new JPanel(); 18 group = new ButtonGroup(); 19 addRadioButton(buttonPanel, group, "Lowered bevel", true); 20 addRadioButton(buttonPanel, group, "Raised bevel", false); 21 addRadioButton(buttonPanel, group, "Etched", false); 22 addRadioButton(buttonPanel, group, "Line", false); 23 addRadioButton(buttonPanel, group, "Matte", false); 24 addRadioButton(buttonPanel, group, "Empty", false); 25 26 Border etched = BorderFactory.createEtchedBorder(); 27 Border titled = BorderFactory.createTitledBorder(etched, 28 "Border types"); 29 buttonPanel.setBorder(titled); 30 31 getContentPane().add(buttonPanel, BorderLayout.PAGE_END); 32 33 setDemoPanel(); 34 35 setTitle("BorderTest"); 36 setSize(600, 200); 37 addWindowListener(new WindowAdapter() 38 { 39 public void windowClosing(WindowEvent e) 40 { 41 System.exit(0); 42 } 43 }); 44 } 45 46 public void addRadioButton(JPanel buttonPanel, ButtonGroup g, 47 String buttonName, boolean v) 48 { 49 JRadioButton button = new JRadioButton(buttonName, v); 50 button.addActionListener(this); 51 g.add(button); 52 buttonPanel.add(button); 53 button.setActionCommand(buttonName); // bestemmer en streng som 54 //kan brukes til å identifisere knappen når den blir klikket på 55 } 56 57 public void actionPerformed(ActionEvent evt) 58 { 59 setDemoPanel(); 60 } 61 62 public void setDemoPanel() 63 { 64 JPanel panel = new JPanel(); 65 Border border = null; 66 // henter ut identifikasjonsstrengen for den knappen som nå er 67 // blitt klikket på 68 String command = group.getSelection().getActionCommand(); 69 if (command.equals("Lowered bevel")) 70 border = BorderFactory.createLoweredBevelBorder(); 71 else if (command.equals("Raised bevel")) 72 border = BorderFactory.createRaisedBevelBorder(); 73 else if (command.equals("Etched")) 74 border = BorderFactory.createEtchedBorder(); 75 else if (command.equals("Line")) 76 border = BorderFactory.createLineBorder(Color.blue); 77 else if (command.equals("Matte")) 78 border = BorderFactory.createMatteBorder(10, 10, 10, 10, 79 Color.blue); 80 else if (command.equals("Empty")) 81 border = BorderFactory.createEmptyBorder(); 82 83 panel.setBorder(border); 84 getContentPane().add(panel, BorderLayout.CENTER); 85 validate(); 86 } 87 } 88 89 public class BorderTest 90 { 91 public static void main(String[] args) 92 { 93 JFrame frame = new BorderFrame(); 94 frame.setVisible(true); 95 } 96 }
BorderDemo.java
er en del mer komplisert. Det er hentet fra The Java Tutorial. Det viser mange
eksempler på rammer, enkle og sammensatte. Programmet gjør bruk av bildefila
wavy.gif som må ligge i
underkatalogen images
i forhold til programmets class-fil.
Ved kjøring starter programmet opp med å vise vinduet som er gjengitt på
følgende bilde.
![]() |
![]() |
Start på kapittel om spesialiserte komponenter for grafiske brukergrensesnitt |