Kĩ thuật lập trình - Chương 17: Gui components and events
Places components in a line as long as they fit, then starts the next line.
Uses “best judgement” in spacing components. Centers by default.
Lets each component assume its natural (preferred) size.
Often used for placing buttons on panels.
32 trang |
Chia sẻ: huyhoang44 | Lượt xem: 602 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Chương 17: Gui components and events, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
GUI Components and EventsCopyright © 2011 by Maria Litvin, Gary Litvin, and Skylight Publishing. All rights reserved.Java MethodsObject-Oriented Programmingand Data StructuresMaria Litvin ● Gary Litvin2nd AP edition with GridWorld1Objectives:Get a more systematic introduction to basic Swing components, their methods, and events they generate.Components discussed:JLabelJButtonJToggleButtonJCheckBoxJComboBoxJSliderJTextFieldJPasswordFieldJTextArea 2Pluggable Look and FeelLook and feel (LAF) refers to the GUI aspect of a program.Java’s Swing supports PLAF (Pluggable Look and Feel).Java provides several LAFs, including:“Metal” platform independent“Nimbus” a more polished, cross-platform LAF, added in Java 6.“Windows” for Windows“Windows Classic” like Windows 95“Motif” for Unix / Linux3PLAF (cont’d)Three ways to set look and feel:swing.properties file:Command-line switch:In the program: swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeelC:\> java -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel ... try { UIManager.setLookAndFeel(plafName); } catch (Exception ex) { ... }4GUI ComponentsComponents are created using constructors:To be usable, a component must be added to the application’s “content pane” or to another component: JLabel guest = new JLabel ("Guest”); JPanel scorePanel = new JPanel(); scorePanel.add (guest);5GUI EventsComponents (except JLabel) can generate events.Events are captured and processed by “listeners” — objects equipped to handle a particular type of events.Different types of events are processed by different types of listeners.6ListenersDifferent types of “listeners” are described as interfaces:ActionListenerChangeListenerItemListeneretc.The same object can serve as different listeners (as long as its class implements all the corresponding interfaces).7Listeners (cont’d)public class GoHandler implements ActionListener{ ... public void actionPerformed (ActionEvent e) { ... }} ... JButton go = new JButton (“Go”); go.addActionListener (new GoHandler ());Objects of this class are GoHandlers but also ActionListenersThis method expects an ActionListener; a GoHandler object qualifies.This method is called automatically when the button is clicked8Listeners (cont’d)When implementing an event listener, programmers often use a private inner class that has access to all the fields of the surrounding public class.An inner class can have constructors and private fields, like any other class.A private inner class is accessible only in its outer class.9Listeners (cont’d)public class MyPanel extends JPanel{ private JButton go; ... go = new JButton (“Go”); go.addActionListener (new GoHandler ()); ... private class GoHandler implements ActionListener { public void actionPerformed (ActionEvent e) { go.setText(“Stop”); ... } }} go is accessible in constructors and methods of the inner class10Listeners (cont’d)You don’t have to capture all events.If you don’t want to deal with events from a component, just don’t attach a listener to it.If you do want to capture events but forget to add a listener, no events will be captured (a common omission).11Listeners (cont’d)actionPerformed (or another listener method) takes a corresponding type of event as a parameter.Event objects have useful methods. For example, getSource returns the object that produced this event.A MouseEvent has methods getX, getY.12GUI Components ReviewJava Methods Appendix C contains brief summaries of several Swing components, their constructors, methods, and events.For a complete specification refer to the Java Swing API docs.13JLabelConstructors: JLabel (String text);JLabel (ImageIcon icon);JLabel (String text, ImageIcon icon, SwingConstants.LEFT); // or CENTER, RIGHT, LEADING, TRAILING.Methods:void setText (String text);void setIcon (ImageIcon icon);Events: None14JButtonConstructors: JButton (String text);JButton (ImageIcon picture);JButton (String text, ImageIcon picture);Methods:void addActionListener (ActionListener object)void setText (String text);void setActionCommand (String cmd);void setIcon (ImageIcon icon);void requestFocus();Events:class ... implements ActionListener{ public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); String s = e.getActionCommand(); }}15JCheckBoxConstructors: JCheckBox (String text, boolean checked);JCheckBox (ImageIcon icon, boolean checked);JCheckBox (String text, ImageIcon icon, boolean checked);Methods:void addActionListener (ActionListener object)boolean isSelected ()void setSelected (boolean checked)void setText (String text);void setIcon (ImageIcon icon);Events:class ... implements ActionListener{ public void actionPerformed(ActionEvent e) { JCheckBox b = (JCheckBox)e.getSource(); if (b == checkBox1 && b.isSelected()) ... }}16etc.See Java Methods Appendix C.17LayoutsA layout manager is a strategy for placing components on the content pane or another component (usually a panel).In Java, the content pane and any GUI component is a Container.A layout is chosen by calling the container’s setLayout method.18Layouts (cont’d)Layouts are used to achieve some degree of platform independence and scalability.awt/Swing support several layout managers. Here we consider four:FlowLayoutGridLayoutBorderLayoutBoxLayoutEach of these classes implements the java.awt.LayoutManager interface.19FlowLayoutPlaces components in a line as long as they fit, then starts the next line.Uses “best judgement” in spacing components. Centers by default.Lets each component assume its natural (preferred) size.Often used for placing buttons on panels.20FlowLayout (cont’d) Container c = getContentPane(); c.setLayout(new FlowLayout()); c.add (new JButton ("Back to Start")); c.add (new JButton ("Previous Slide")); c.add (new JButton ("Next Slide")); c.add (new JButton ("Last Slide")); c.add (new JButton ("Exit"));21GridLayoutSplits the panel into a grid with given numbers of rows and columns.Places components into the grid cells.Forces the size of each component to occupy the whole cell.Allows additional spacing between cells.22GridLayout (cont’d) Container c = getContentPane(); c.setLayout (new GridLayout(3, 2, 10, 20 )); c.add (new JButton ("Back to Start")); c.add (new JButton ("Previous Slide")); c.add (new JButton ("Next Slide")); c.add (new JButton ("Last Slide")); c.add (new JButton ("Exit"));Extra space between the cells (in pixels)23BorderLayoutDivides the area into five regions and adds a component to the specified region.Forces the size of each component to occupy the whole region.NORTHSOUTHCENTEREASTWEST24BorderLayout (cont’d) Container c = getContentPane(); c.setLayout(new BorderLayout()); // optional: default c.add (new JButton ("Next Slide"), BorderLayout.EAST); c.add (new JButton ("Previous Slide"), BorderLayout.WEST); c.add (new JButton ("Back to Start"), BorderLayout.NORTH); c.add (new JButton ("Last Slide"), BorderLayout.SOUTH); c.add (new JButton ("Exit"), BorderLayout.CENTER);25BoxLayoutIn a horizontal box, components are placed horizontally, left to right.In a vertical box, components are placed vertically, top to bottom.“Horizontal” or “vertical” has nothing to do with the shape of the box itself.26BoxLayout (cont’d)BoxLayout is the default layout for a Box container.The idiom for working with boxes is slightly different: Box box1 = Box.createHorizontalBox(); box1.add (...); // add a spacer, 60 pixels: box1.add(Box.createHorizontalStrut (60)); Box box2 = Box.createVerticalBox(); ...27BoxLayout (cont’d) Container c = getContentPane(); c.setLayout(new FlowLayout()); Box box = Box.createVerticalBox(); box.add (new JButton ("Next Slide")); box.add (new JButton ("Previous Slide")); box.add (Box.createVerticalStrut (20) ); box.add (new JButton ("Exit")); c.add (box);Adds extra vertical space between components28Default LayoutsEach component has a default layout manager, which remains in effect until the component’s setLayout method is called.The defaults are: Content pane BorderLayout JPanel FlowLayout Box BoxLayout29MenusYou can add a JMenuBar object to JFrame or JApplet.You can add JMenu objects to a JMenuBar.You can add other JMenus, JMenuItems, JCheckBoxMenuItems, JRadioButtonMenuItems, etc. to a JMenu.See Section 17.5 for an example.30Review:What are the three ways to set a PLAF?Can a container contain another container?Name several Swing GUI components.Is an action listener a class, an interface, an object, or a method?How do FlowLayout and GridLayout deal with the sizes of components?31Review (cont’d):What is the default layout manager for the content pane?What type of objects can you add to a JMenu?32
Các file đính kèm theo tài liệu này:
- ch17_1161.ppt