510 likes | 624 Views
MENU’S. Menu: enkel voor applicaties, niet voor applets soorten: hoofdmenu shortcut popupmenu. 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. L ayoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout. MENU’S -- HOOFDMENU.
E N D
MENU’S • Menu: • enkel voor applicaties, niet voor applets • soorten: • hoofdmenu • shortcut • popupmenu 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. Layoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout JAVA -- H10
MENU’S -- HOOFDMENU MenuBar 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. Layoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout Menu (= hoofdmenu) MenuItem ( = submenu) In Visual Café: via Insert Component In JDK: in 3 stappen JAVA -- H10
MENU’S – HOOFDMENU – VOORBEELD1 JAVA -- H10
MENU’S – HOOFDMENU – VOORBEELD1(1) • 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(); • } JAVA -- H10
MENU’S – HOOFDMENU – VOORBEELD1(2) 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); JAVA -- H10
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 -- H10
MENU’S – HOOFDMENU – VOORBEELD1(4) public void paint(Graphics g) { if (keuze != null) { String s = null; if (keuze == zoogdieren)s = "Olifant, paard, hond"; elseif (keuze == vogels)s = "Spreeuw, duif, zwaluw"; elseif (keuze == bomen)s = "Eik, beuk, spar"; elseif (keuze == bloemen) s= "Roos, zonnebloem, madeliefje"; else s= "Programmafout"; g.drawString(s, 80, 140);}} JAVA -- H10
MENU’S – HOOFDMENU – VOORBEELD2 JAVA -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
MENU’S – SHORTCUT • 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)); 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. Layoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout JAVA -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
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. Layoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout JAVA -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
MENU’S – POPUPMENU - VOORBEELD JAVA -- H10
LAYOUT MANAGERS • Soorten: • FlowLayout • BorderLayout • CardLayout • GridLayout • GridBagLayout • BoxLayout (Swing) Instellen:setLayout( …..) of setLayout(null) Opvragen: getLayout() 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. Layoutmanager FlowLayout BorderLayout CardLayout GridLayout GridBagLayout JAVA -- H10
LAYOUT MANAGERS – VOORBEELD FLOWLAYOUT 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"); JAVA -- H10
LAYOUT MANAGERS – VOORBEELD FLOWLAYOUT public void init() { setLayout(new FlowLayout()); add(knop1); add(knop2); add(knop3); add(knop4); add(knop5); setVisible(true); }} JAVA -- H10
LAYOUT MANAGERS – VOORBEELD FLOWLAYOUT FlowLayout.CENTER + hgap = vgap = 5 (default-constructor) JAVA -- H10
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 -- H10
LAYOUT MANAGERS – VOORBEELD BORDERLAYOUT hgap = vgap = 0 JAVA -- H10
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 -- H10
LAYOUT MANAGERS – VOORBEELD CARDLAYOUT public void start() { for (int kaarten = 1; kaarten < 50; kaarten ++) { layout.next(this); for (int pauze = 1; pauze < 400000; pauze++); } } JAVA -- H10
LAYOUT MANAGERS – VOORBEELD CARDLAYOUT • Bijkomende methoden: • first (Container) • last (Container) • next (Container) • previous (Container) • show (Container, Card) • bv. layout.show(this,Vijf); JAVA -- H10
LAYOUT MANAGERS – VOORBEELD CARDLAYOUT hgap = vgap = 0 JAVA -- H10
LAYOUT MANAGERS – GRIDLAYOUT 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. Layoutmanager 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 -- H10
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 -- H10
LAYOUT MANAGERS – VOORBEELD GRIDLAYOUT hgap = vgap = 0 JAVA -- H10
LAYOUT MANAGERS – GRIDBAGLAYOUT 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2. Layoutmanager 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 -- H10
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 -- H10
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 -- H10
LAYOUT MANAGERS – VOORBEELD 2 GRIDBAGLAYOUT JAVA -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10
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 -- H10