Komponent hieraki Applet JPanel Component Container JComponent Panel Window JWindow Frame JApplet Dialog Brukes vanligvis som en ekstra container for å få til ønske layout. Legges til som en hvilken som annen knapp. Layout kan settes for en enkel JPanel. Du kan legge til JPanels til andre JPanels og på denne måten få til relativt fansy grafikk JPanel JFrame JDialog Applet/JApplet Begge klassene er ment dersom man ønsker å lage javaprogram som skal kjøre i en browser. JApplet har samme funksjonalitet som Applet, men den støtter i tillegg swing og JFC arkitekturen. Window/JWindow Et vindu som man kan putte grafikk inni. Window har ikke tittellinje eller kant rundt seg. Det er ikke vanlig å bruke denne klassen. Vanligvis bruker man ett av klassens barn: JFrame eller JDialog JFrame Dette er klassen det er vanlig å bruke når man ønsker et vindu. Klassen har tittellinje og kan rundt hele vinduet sitt. Du kan sette layout på en Jframe, dvs contentpanen dens, men det er også vanlig å bruke en eller flere Jpanels for å oppnå den layouten du ønsker. JDialog JDialog er også et vindu, men i motsetning til JFrame må JDialog ha et morvindu. Det er mulig å låse morvinduet slik at du ikke får gjort noe mer i det vinduet før du har lukket dialog vinduet. Det er vanlig å bruke dette vinduet når programmet ditt trenger input fra brukeren. 1
Spørsmål: Hva er hensikten med JPanel klassen? Når brukes JApplet klassen? Hva er hovedforskjellen mellom JWindow og JFrame klassen? Hva er hovedforskjellen på JFrame og JDialog klassen? Hva benyttes vanligvis et JDialogvindu til? Layout Managere: BorderLayout BoxLayout CardLayout FlowLayout GridLayout GridBagLayout BorderLayout Har vi snakket om tidligere: Du setter en continers layout med følgende metodekall: container.setlayout(new BorderLayout); For å legge til komponenter: add(conponent,borderlayout.himmelretni NG); dvs: NORTH,SOUTH,EAST,WEST osv BoxLayout Eneste swinglayouten. Tar hensyn til anbefalt størrelse på komponentene. BoxLayout legger alle komponentene på rekke etterhverandre. Enten vertikalt eller horisontalt. Vanlige metoder i BoxLayout Container cont; cont.setlayout(new BoxLayout(cont,BoxLayout.X_AXIS)); add(component c) brukes på vanlig måte. import java.awt.*; import javax.swing.*; public class VinduTo extends JFrame { private JPanel topdel = new JPanel(); private JPanel bunndel = new JPanel(); public VinduTo(String title) { super(title); public static void main(string[] args) { VinduTo nyttvindu = new VinduTo("Enda et vindu"); nyttvindu.tegnvindu(); 2
public void tegnvindu() { topdel.setlayout(new BoxLayout(topDel, BoxLayout.X_AXIS)); //Lager vinduets nederste del av vinduet bunndel.setlayout(new BoxLayout(bunnDel,BoxLayout.X_AXIS)); JButton avbryt = new JButton("Avbryt"); avbryt.setalignmentx(left_alignment); JButton videre = new JButton("Fortsett"); videre.setalignmentx(right_alignment); bunndel.add(avbryt); bunndel.add(box.createhorizontalglue()); bunndel.add(videre); //SetteLayout på hovedvinduet. Container detgraae = getcontentpane(); detgraae.setlayout(new BoxLayout(detGraae,BoxLayout.Y_AXIS)); detgraae.add(topdel); detgraae.add(box.createverticalglue()); detgraae.add(bunndel); setsize(400,400); pack(); show(); Så legger vi til litt til topdel.setlayout(new BoxLayout(topDel, BoxLayout.X_AXIS)); JLabel tekst = new JLabel("Navn: "); tekst.setalignmentx(left_alignment); JTextField tf = new JTextField(""); tf.setcolumns(25); tf.setalignmentx(right_alignment); topdel.add(tekst); topdel.add(box.createhorizontalglue()); topdel.add(tf); Og får: Hva med litt mellomrom? topdel.add(box.createrigidarea(new topdel.add(tekst); topdel.add(box.createhorizontalglue()); topdel.add(tf); topdel.add(box.createrigidarea(new detgraae.add(topdel); detgraae.add(bunndel); FlowLayout public FlowLayout() public FlowLayout(int alignment) public FlowLayout(int alignment, int horizontalgap, int verticalgap) alignment: FlowLayout.LEFT, CENTER,RIGHT 3
GridLayout public void brukgridlayout() { Container c = getcontentpane(); c.setlayout(new GridLayout(2,2)); c.add(new JButton("1")); c.add(new JButton("2")); c.add(new JButton("3")); c.add(new JButton("4")); setsize(200,100); show(); Resultat: Hvis man endrer vindusstørrelsen til 100,200 isteden: Spørsmål: Hva er hovedforskjellen mellom BoxLayout og de andre Layout typene? Når må vi bruke pack metoden, og når der det unødvendig? Hvilken layouttype ville du brukt om målet var å til en enkel layout fort? Hvilken layouttype ville du brukt om du ønsket mest mulig kontroll? Lyttere Det finnes mange typer lyttere, men den mest nyttige ved siden av ActionListener er nok VindusLytteren. For å lage en slik lytter implementerer man WindowsListener og bruker metoden: addwindowlistener(new VinduLytter(this)) public class VinduLytter implements WindowListener { private VinduTo masert; public VinduLytter(VinduTo nyttvindu) { masert = nyttvindu; public void windowactivated(windowevent e) { public void windowclosed(windowevent e) { System.exit(0); public void windowclosing(windowevent e) { masert.dispose(); public void windowdeactivated(windowevent e) { public void windowdeiconified(windowevent e) { public void windowiconified(windowevent e) { public void windowopened(windowevent e) { Spørsmål Hvordan kan du få en knapp til å virke? Hvordan kan du styre hva som skjer når du trykker på en knapp? Hvorfor kan det være gunstig å bruke en WindowsListener? Hva er egentlig en lytter? 4
Generelt om lyttere: Programmet kjøres til ende, og så stopper alt som vanlig. For at det skal skje noe med GUIen etter dette m man ha lyttere. Lytterne sørger for å bestemte metoder blir kjørt for eksempel dersom du trykker på en bestemt knapp. Programmet stopper så opp igjen til neste gang noen trykker på en knapp. start Programmet startes opp Venter på bedre tider En av lytterne blir utløst. Mainmetoden kjøres Passende metode i Lytterklasse kjøres 5