JAVA -- H101 Menu: enkel voor applicaties, niet voor applets soorten: hoofdmenu shortcut popupmenu MENU’S 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout
JAVA -- H102 MenuBar MENU’S -- HOOFDMENU 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout Menu (= hoofdmenu) MenuItem ( = submenu) In Visual Café: via Insert Component In JDK: in 3 stappen
JAVA -- H103 MENU’S – HOOFDMENU – VOORBEELD1
JAVA -- H104 import java.awt.*; import java.awt.event.*; public class Biologie extends Frame implements ActionListener { MenuItem zoogdieren, vogels, bomen, bloemen, keuze; public static void main(String[] args) { new Biologie(); } MENU’S – HOOFDMENU – VOORBEELD1(1)
JAVA -- H105 Biologie() { MenuBar mbalk = new MenuBar(); setTitle("Biologie"); setMenuBar(mbalk); Menu mD= new Menu("Dieren"), mP = new Menu("Planten"); mbalk.add(mD); mbalk.add(mP); zoogdieren = new MenuItem("Zoogdieren"); mD.add(zoogdieren); vogels = new MenuItem("Vogels"); mD.add(vogels); bomen = new MenuItem("Bomen"); mP.add(bomen); bloemen = new MenuItem("Bloemen"); mP.add(bloemen); MENU’S – HOOFDMENU – VOORBEELD1(2)
JAVA -- H106 MENU’S – HOOFDMENU – VOORBEELD1(3) zoogdieren.addActionListener(this); vogels.addActionListener(this);bomen.addActionListener(this); bloemen.addActionListener(this); setSize(300,300); // anders enkel een balkje! show(); } public void actionPerformed(ActionEvent evt) { keuze = (MenuItem) evt.getSource(); repaint(); }
JAVA -- H107 MENU’S – HOOFDMENU – VOORBEELD1(4) public void paint(Graphics g) { if (keuze != null) { String s = null; if (keuze == zoogdieren) s = "Olifant, paard, hond"; else if (keuze == vogels) s = "Spreeuw, duif, zwaluw"; else if (keuze == bomen) s = "Eik, beuk, spar"; else if (keuze == bloemen) s= "Roos, zonnebloem, madeliefje"; elses= "Programmafout"; g.drawString(s, 80, 140);}}
JAVA -- H108 MENU’S – HOOFDMENU – VOORBEELD2
JAVA -- H109 MENU’S – HOOFDMENU – VOORBEELD2(1) import java.awt.*; import java.awt.event.*; public class MenuCirkel extends Frame implements ActionListener { private Cirkel mijnCirkel; private MenuItem groterItem, kleinerItem; private MenuItem linksItem, rechtsItem; public static void main(String[] args) { Frame f = new MenuCirkel(); f.setSize(200, 200); f.setVisible(true); }
JAVA -- H1010 MENU’S – HOOFDMENU – VOORBEELD2(2) public MenuCirkel() { setTitle("Cirkel"); setLayout(new FlowLayout()); MenuBar menuBalk = new MenuBar(); Menu grootteMenu = new Menu("Grootte"); groterItem = new MenuItem("Groter"); grootteMenu.add(groterItem); groterItem.addActionListener(this); kleinerItem = new MenuItem("Kleiner"); grootteMenu.add(kleinerItem); kleinerItem.addActionListener(this); menuBalk.add(grootteMenu);
JAVA -- H1011 MENU’S – HOOFDMENU – VOORBEELD2(3) Menu verplaatsMenu = new Menu("Verplaats"); linksItem = new MenuItem("Links"); verplaatsMenu.add(linksItem); linksItem.addActionListener(this); verplaatsMenu.addSeparator(); rechtsItem = new MenuItem("Rechts"); verplaatsMenu.add(rechtsItem); rechtsItem.addActionListener(this); menuBalk.add(verplaatsMenu); setMenuBar(menuBalk); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0); }}); mijnCirkel = new Cirkel(20, 50, 150); }
JAVA -- H1012 MENU’S – HOOFDMENU – VOORBEELD2(4) public void actionPerformed (ActionEvent e) {if (e.getSource() == groterItem) mijnCirkel.wijzigGrootte(10); else if (e.getSource() == kleinerItem) mijnCirkel.wijzigGrootte(-10); else if (e.getSource() == linksItem) mijnCirkel.verplaatsLinks(); else if (e.getSource() == rechtsItem) mijnCirkel.verplaatsRechts(); repaint(); } public void paint(Graphics g) { mijnCirkel.display(g); } }
JAVA -- H1013 MENU’S – HOOFDMENU – VOORBEELD2(5) class Cirkel // = domein { private int diameter; private int xCoord, yCoord; Cirkel(int initDiameter, int initX, int initY) { diameter = initDiameter; xCoord = initX; yCoord = initY; } public void wijzigGrootte(int wijziging) { diameter += wijziging; } public void verplaatsLinks() {xCoord -= 10; } public void verplaatsRechts() { xCoord += 10; } public void display(.Graphics g) { g.drawOval(xCoord, yCoord, diameter, diameter);} }
JAVA -- H1014 MENU’S – SHORTCUT 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout vlugger toegang tot bepaalde (sub)menu’s bijkomende parameter in constructor van MenuItem gebruik maken van constanten van de klasse KeyEvent toetsen aangeven dmv. virtual key (VK) Voorbeeld: Exit = new MenuItem("Exit", new MenuShortcut (KeyEvent.VK_Q));
JAVA -- H1015 MENU’S – SHORTCUT - VOORBEELD(1) import java.awt.*; import java.awt.event.*; import java.io.*; public class LeesBestand extends Frame implements ActionListener { private MenuItem open, exit; private int aantalE = -1; public static void main(String[] args) { new LeesBestand(); }
JAVA -- H1016 MENU’S – SHORTCUT - VOORBEELD (2) LeesBestand() { MenuBar mBalk = new MenuBar(); setTitle("Filedialoogvenster en karakterinvoer"); setMenuBar(mBalk); Menu mFile = new Menu("Bestand"); mBalk.add(mFile); open = new MenuItem("Open",new MenuShortcut(KeyEvent.VK_O)); exit = new MenuItem("Exit",new MenuShortcut(KeyEvent.VK_Q));
JAVA -- H1017 MENU’S – SHORTCUT - VOORBEELD 1(3) mFile.add(open); mFile.addSeparator(); mFile.add(exit); open.addActionListener(this); exit.addActionListener(this); setSize(getToolkit().getScreenSize().width/2, getToolkit().getScreenSize().height/4); show(); }
JAVA -- H1018 MENU’S – SHORTCUT - VOORBEELD(4) public void actionPerformed (ActionEvent evt) { if ((MenuItem) evt.getSource() == exit)System.exit(0); FileDialog dial = new FileDialog( this,"Open", FileDialog.LOAD); dial.show(); String fNaam = dial.getFile(), fDir = dial.getDirectory(); if (fNaam == null || fDir == null) return; FileInputStream fis; try {fis = new FileInputStream(fDir + fNaam);} catch(FileNotFoundException fnfe) { getToolkit().beep(); return;}
JAVA -- H1019 MENU’S – SHORTCUT - VOORBEELD(5) try { aantalE = 0; for ( ; ; ) { int chInt = fis.read(); if (chInt == -1) break; // EOF if (chInt == 'e' || chInt == 'E') aantalE++; } fis.close(); } catch(IOException ioe) { } repaint(); }
JAVA -- H1020 MENU’S – SHORTCUT - VOORBEELD(6) public void paint(Graphics g) { if (aantalE >= 0) g.drawString("Aantal letters e of E = “ + aantalE, 80, 120); } FileInputStream leest sequentieel bytes van een stream: byte[] buffer = new byte[4096]; int bytes_read; while ((bytes_read = from.read(buffer))!=-1) to.write(buffer,0,bytes_read);
JAVA -- H1021 MENU’S – POPUPMENU Aanmaken van een menu in een component of frame Snel en gemakkelijk Geen toegangs-geheugentoetsen, zoals F10 (= naar menu-bar), maar eens geselecteerd kunnen we terug met de pijltjestoetsen werken PopupMenu: subklasse van Menu Via methode show(Component source, int x, int y) 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout
JAVA -- H1022 MENU’S – POPUPMENU -- VOORBEELD(1) import java.awt.*; import java.awt.event.*; import java.io.*; public class PopupDemo extends Frame implements ActionListener { PopupMenu p; CvPopupMenu cv; MenuItem rood, groen, blauw, keuze = null; public static void main(String[] args) { new PopupDemo(); }
JAVA -- H1023 MENU’S – POPUPMENU - VOORBEELD(2) PopupDemo() { setTitle("Klik eerst met rechtermuisknop"); cv = new CvPopupMenu(this); add(cv, "Center"); p = new PopupMenu(); rood = pVoegToe("Rood"); groen = pVoegToe("Groen"); blauw = pVoegToe("Blauw"); cv.add(p); show(); }
JAVA -- H1024 MENU’S – POPUPMENU - VOORBEELD(3) MenuItem pVoegToe(String s) { MenuItem mi = new MenuItem(s); mi.addActionListener(this); p.add(mi); return mi; } public void actionPerformed(ActionEvent e) { keuze = (MenuItem)e.getSource(); cv.repaint(); }
JAVA -- H1025 MENU’S – POPUPMENU - VOORBEELD(4) class CvPopupMenu extends Canvas { private PopupDemo fr; // communicatie met andere klasse void toon(MouseEvent e) { fr.p.show(this, e.getX(), e.getY());} CvPopupMenu(PopupDemo fr) { this.fr = fr; addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) toon(e); else repaint(); } ); }
JAVA -- H1026 MENU’S – POPUPMENU - VOORBEELD(5) public void paint(Graphics g) { if (fr.keuze == null) return; Color kl = (fr.keuze == fr.rood ? Color.red : fr.keuze == fr.groen ? Color.green : Color.blue); g.setColor(kl); Dimension d = getSize(); // grootte van de frame g.fillOval(0, 0, d.width, d.height); }
JAVA -- H1027 MENU’S – POPUPMENU - VOORBEELD
JAVA -- H1028 Soorten: FlowLayout BorderLayout CardLayout GridLayout GridBagLayout BoxLayout (Swing) Instellen: setLayout( …..) of setLayout(null) Opvragen: getLayout() LAYOUT MANAGERS 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout
JAVA -- H1029 import java.applet.Applet; import java.awt.*; public class FlowApplet extends Applet // default FlowLayout { Button knop1 = new Button("Ik"); Button knop2 = new Button("denk,"); Button knop3 = new Button("dus"); Button knop4 = new Button("ik"); Button knop5 = new Button("ben"); LAYOUT MANAGERS – VOORBEELD FLOWLAYOUT
JAVA -- H1030 public void init() { setLayout(new FlowLayout()); add(knop1); add(knop2); add(knop3); add(knop4); add(knop5); setVisible(true); } LAYOUT MANAGERS – VOORBEELD FLOWLAYOUT
JAVA -- H1031 LAYOUT MANAGERS – VOORBEELD FLOWLAYOUT FlowLayout.CENTER + hgap = vgap = 5 (default-constructor)
JAVA -- H1032 LAYOUT MANAGERS – VOORBEELD BORDERLAYOUT public void init() { setLayout(new BorderLayout()); add(knop1, "North"); add(knop2, "South"); add(knop3, "East"); add(knop4, "West"); add(knop5, "Center"); setVisible(true); }
JAVA -- H1033 LAYOUT MANAGERS – VOORBEELD BORDERLAYOUT hgap = vgap = 0
JAVA -- H1034 LAYOUT MANAGERS – VOORBEELD CARDLAYOUT CardLayout layout = new CardLayout(); public void init() { setLayout(layout); add(knop1,”Eén”); add(knop2,”Twee”); add(knop3,”Drie”); add(knop4,”Vier”); add(knop5,”Vijf”); setVisible(true); }
JAVA -- H1035 LAYOUT MANAGERS – VOORBEELD CARDLAYOUT public void start() { for (int kaarten = 1; kaarten < 50; kaarten ++) { layout.next(this); for (int pauze = 1; pauze < ; pauze++); }
JAVA -- H1036 LAYOUT MANAGERS – VOORBEELD CARDLAYOUT Bijkomende methoden: first (Container) last (Container) next (Container) previous (Container) show (Container, Card) bv. layout.show(this,Vijf);
JAVA -- H1037 LAYOUT MANAGERS – VOORBEELD CARDLAYOUT hgap = vgap = 0
JAVA -- H1038 LAYOUT MANAGERS – GRIDLAYOUT 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout alle componenten zijn even groot raster met opgegeven aantal rijen en kolommen afmetingen van de cellen veranderen samen met de afmetingen van het venster
JAVA -- H1039 LAYOUT MANAGERS – VOORBEELD GRIDLAYOUT public void init() { setLayout(new GridLayout(2, 3)); add(knop1); add(knop2); add(knop3); add(knop4); add(knop5); setVisible(true); }
JAVA -- H1040 LAYOUT MANAGERS – VOORBEELD GRIDLAYOUT hgap = vgap = 0
JAVA -- H1041 LAYOUT MANAGERS – GRIDBAGLAYOUT 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout opsplitsing in rijen en kolommen component kan meerdere cellen in beslag nemen klasse GridBagConstraints om per component bepaalde eigenschappen (constraints) vast te leggen constraints instellen d.m.v. setConstraints (Java 1.0) of via de add-methode (Java 1.1)
JAVA -- H1042 LAYOUT MANAGERS – GRIDBAGLAYOUT Velden van het GridBagConstraints-object: gridx en gridy : de positie van de component in het grid gridwidth en gridheight : aantal rijen en kolommen, dat de component in de grid inneemt insets : specifieert de marge, in aantal pixels, dat moet vrij- gelaten worden rond de component fill : specifieert hoe een component moet groeien, wanneer er meer plaats ter beschikking is anchor : als een component kleiner is dan de cel waarin hij wordt geplaatst, geeft deze variabele aan hoe de component moet worden opgesteld
JAVA -- H1043 LAYOUT MANAGERS – GRIDBAGLAYOUT weightx en weighty: als in de container nog plaats over is, wordt de ruimte volgens de “gewichten” opgedeeld (1.0 betekent : de resterende ruimte mag volledig benut worden) Voorbeeld 1: GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.insets = new Insets(5,5,5,5); c.gridx = 0; c.gridy = 0; c.gridwidth = 4; c.gridheight = 4; c.weightx = c.weighty = 1.0; add(new Button(“Button #1”),c); c.gridx = 4; c.gridy = 0; c.gridwidth = 1; c.gridheight = 1; c.weightx = c.weighty = 0.0; add(new Button(“Button #2”),c); c.gridx = 4; c.gridy = 1; c.gridwidth = 1; c.gridheight = 1; add(new Button(“Button #3”),c); c.gridx = 4; c.gridy = 2; c.gridwidth = 1; c.gridheight = 2; add(new Button(“Button #4”),c);
JAVA -- H1044 LAYOUT MANAGERS – VOORBEELD 2 GRIDBAGLAYOUT
JAVA -- H1045 LAYOUT MANAGERS – VOORBEELD 2 GRIDBAGLAYOUT import java.applet.Applet; import java.awt.*; public class Grid_Bag extends Applet { private Button knop1 = new Button("Ik"); private Button knop2 = new Button("denk,"); private Button knop3 = new Button("dus"); private Button knop4 = new Button("ik"); private Button knop5 = new Button("ben"); private GridBagLayout gridBag = new GridBagLayout(); }
JAVA -- H1046 LAYOUT MANAGERS – VOORBEELD 2 GRIDBAGLAYOUT private void eerste_rij (Button knop) {GridBagConstraints constraints = new GridBagConstraints(); constraints.gridwidth = GridBagConstraints.REMAINDER; // de component mag de resterende ruimte innemen constraints.anchor = GridBagConstraints.WEST; // de component moet westelijk staan t.o.v. de rij gridBag.setConstraints (knop, constraints); add(knop); }
JAVA -- H1047 LAYOUT MANAGERS – VOORBEELD 2 GRIDBAGLAYOUT private void tweede_rij (Button knop1, Button knop2) { GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.weightx = 1.0; gridBag.setConstraints(knop1, constraints); add(knop1); constraints = new GridBagConstraints(); constraints. gridwidth = GridBagConstraints.REMAINDER; constraints.fill = GridBagConstraints.VERTICAL; constraints.weighty = 1.0; // de resterende ruimte innemen gridBag.setConstraints(knop2, constraints); add(knop2); }
JAVA -- H1048 LAYOUT MANAGERS – VOORBEELD 2 GRIDBAGLAYOUT private void derde_rij (Button knop) { GridBagConstraints constraints = new GridBagConstraints(); constraints. gridwidth = GridBagConstraints.REMAINDER; constraints.fill = GridBagConstraints.BOTH; // de component moet in beide richtingen aangroeien constraints.weighty = 1.0; gridBag.setConstraints(knop, constraints); add(knop); }
JAVA -- H1049 LAYOUT MANAGERS - VOORBEELD 2 GRIDBAGLAYOUT private void vierde_rij (Button knop) { GridBagConstraints constraints = new GridBagConstraints(); constraints. gridwidth = GridBagConstraints.REMAINDER; gridBag.setConstraints(knop, constraints); add(knop); // wordt default centraal gezet rij 1 }
JAVA -- H1050 LAYOUT MANAGERS – VOORBEELD 2 GRIDBAGLAYOUT public void init() { setLayout( gridBag); eerste_rij(knop1); tweede_rij(knop2, knop3); derde_rij(knop4); vierde_rij(knop5); setVisible(true); }
JAVA -- H1051 LAYOUT MANAGERS – BOXLAYOUT Voorbeeld: JPanel p = new JPanel(); p.setLayout(new BoxLayout(p,BoxLayout.Y_AXIS)); p.setBorder(newTitledBorder(new EtchedBorder(),”Column”)); for (int i = 0;i < 4;i++) { JButton b = new JButton(“Button” + i); b.setFont(new Font(“serif”,Font.BOLD,10+i*2)); p.add(b); }