Kĩ thuật lập trình - Chương 22: Gui components: Part 2

Java applications’ appearances A program that uses Java’s Abstract Window Toolkit GUI components takes on the look-and-feel of the platform Allows users of the application on each platform to use GUI components with which they are already familiar Also introduces interesting portability issues Swing’s lightweight GUI components provide uniform functionality Define a uniform cross-platform look-and-feel (known as the metal look-and-feel) Also can customize the look-and-feel to appear as a Microsoft Windows-style, Motif-style (UNIX) or Macintosh look-and-feel

ppt101 trang | Chia sẻ: huyhoang44 | Lượt xem: 694 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Chương 22: Gui components: Part 2, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
22GUI Components: Part 2 1 An actor entering through the door, you've got nothing. But if he enters through the window, you've got a situation.Billy Wilder...the force of events wakes slumberous talents.Edward HoaglandYou and I would see more interesting photography if they would stop worrying, and instead, apply horse-sense to the problem of recording the look and feel of their own era.Jessie Tarbox Beals2OBJECTIVESIn this chapter you will learn: To create and manipulate sliders, menus, pop-up menus and windows.To change the look-and-feel of a GUI, using Swing's pluggable look-and-feel.To create a multiple-document interface with JDesktopPane and JInternalFrame.To use additional layout managers.322.1 Introduction 22.2 JSlider 22.3 Windows: Additional Notes 22.4 Using Menus with Frames 22.5 JPopupMenu 22.6 Pluggable Look-and-Feel 22.7 JDesktopPane and JInternalFrame 22.8 JTabbedPane 22.9 Layout Managers: BoxLayout and GridBagLayout 22.10 Wrap-Up 422.1  Introduction Pluggable look-and-feel (PLAF)Swing can customize the look-and-feel of the GUIMotifA popular UNIX look-and-feelMultiple-document interface (MDI)A main window (the parent window) containing other windows (child windows)Manages several open documents parallel522.2  JSlider JSliderEnables the user to select from a range of integer valuesInherits from JComponentContains:Tick marksCan display major tick marks, minor tick marks and labels for tick marksAre not displayed by defaultThumbAllows the user to select a valueSnap-to ticksCause the thumb to snap to the closest tick mark6Fig. 22.1 | JSlider component with horizontal orientation. thumbtick mark722.2  JSlider (Cont.)If a JSlider has the focus (is the currently selected GUI component in the user interface)Left/right arrow keys cause the thumb of the JSlider to decrease/increase by 1Down/up arrow keys cause the thumb of the JSlider to decrease/increase by 1PgDn (page down)/PgUp (page up) keys cause the thumb of the JSlider to decrease/increase by block increments of one-tenth of the range of valuesHome/End keys move the thumb of the JSlider to the minimum/maximum value of the JSlider822.2  JSlider (Cont.)Can have either horizontal or vertical orientationMinimum value is at the left or bottom end of the JSliderMaximum value is at the right or top end of the JSliderJSlider method setInverted reverses the minimum and maximum value positionsGenerate ChangeEvents in response to user interactionsAn object of a class that implements interface ChangeListener and declares method stateChanged can respond to ChangeEvents9Look-and-Feel Observation 22.1 If a new GUI component has a minimum width and height (i.e., smaller dimensions would render the component ineffective on the display), override method getMinimumSize to return the minimum width and height as an instance of class Dimension.10Software Engineering Observation 22.1 For many GUI components, method getMinimumSize is implemented to return the result of a call to the component’s getPreferredSize method.11Used as the width and height of the bounding box in which the circle is displayedDraws a filled circleChange the circle’s diameter and repaint12Return the preferred width and height of an OvalPanelReturn an OvalPanel’s minimum width and height13Create OvalPanel object myPanelCreate JSlider object diameterSlider as a horizontal JSlider with a range of 0-200 and a initial value of 10Indicate that each major-tick mark represents 10 values and that the tick marks should be displayed14Register a ChangeListener to handle diameterSlider’s eventsMethod stateChanged is called in response to a user interactionCall myPanel’s setDiameter method and pass the current thumb position value returned by JSlider method getValue151622.3  Windows: Additional Notes JFrameIs a window with a title bar and a borderA subclass of java.awt.FrameWhich is a subclass of java.awt.WindowOne of the few Swing GUI components that is not a lightweight GUI componentJava application windows look like every other window displayed on that platform17Good Programming Practice 22.1 A windows is an expensive system resource. Return it to the system when it is no longer needed.1822.3  Windows: Additional Notes (Cont.)JFrame method setDefaultCloseOperation determines what happens when the user closes the windowDISPOSE_ON_CLOSEDispose of the Window to return resources to the systemDO_NOTHING_ON_CLOSEIndicates that the program will determine what to do when the user indicates that the window should closeHIDE_ON_CLOSEThe defaultJFrame method setVisibleDisplay the window on the screenJFrame method setLocationSpecify the window’s position when it appears on the screen19Common Programming Error 22.1 Forgetting to call method setVisible on a window is a runtime logic error—the window is not displayed.20Common Programming Error 22.2 Forgetting to call the setSize method on a window is a runtime logic error—only the title bar appears.2122.3  Windows: Additional Notes (Cont.)User manipulation of the window generates window eventsMethod addWindowListener registers event listeners for window eventsInterface WindowListener provides seven window-event-handling methodswindowActivated – called when the user makes a window the main windowwindowClosed – called after the window is closedwindowClosing – called when the user initiates closing of the window2222.3  Windows: Additional Notes (Cont.)windowDeactivated – called when the user makes another window the main windowwindowDeiconified – called when the user restores a window from being minimizedwindowIconified – called when the user minimizes a windowwindowOpened – called when a program first displays a window on the screen2322.4  Using Menus with Frames MenusAllow the user to perform actions without unnecessarily cluttering a GUI with extra componentsCan be attached only to objects of the classes that provide member setMenuBar, such as JFrame and JAppletClass MenuBarContains the methods necessary to manage a menu barClass JMenuContains the methods necessary for managing menusClass JMenuItemContains the methods necessary to manage menu itemsCan be used to initiate an action or can be a submenu24Look-and-Feel Observation 22.2 Menus simplify GUIs because components can be hidden within them. These components will only be visible when the user looks for them by selecting the menu.2522.4  Using Menus with Frames (Cont.)Class JCheckBoxMenuItemContains the methods necessary to manage menu items that can be toggled on or offClass JRadioButtonMenuItemContains the methods necessary to manage menu items that can be toggled on or off like JCheckBoxMenuItemsWhen multiple JRadioButtonMenuItems are maintained as part of a ButtonGroup, only one item in the group can be selected at a given timeMnemonicsSpecial characters that can provide quick access to a menu or menu item from the keyboard2627Create a JMenuCall JMenu method setMnemonicAdd the “About” JMenuItem to fileMenu28Create an ActionListener to process aboutItem’s action eventDisplay a message dialog boxCreate and add menu item exitItemRegister an ActionListener that terminates the application29Add fileMenu to a JMenuBar and attach the JMenuBar to the application windowCreate menu formatMenuCreate submenu colorMenuCreate JRadioButtonMenuItem array colorItemsCreate a ButtonGroup to ensure that only one of the menu items is selected at a timeAdd JRadioButtonMenuItems to colorMenu and register ActionListeners30Invoke AbstractButton method setSelectedAdd colorMenu to formatMenu and add a horizontal separator lineCreate JRadioButtonMenuItem array fontsCreate a ButtonGroup to ensure that only one of the menu items is selected at a timeAdd JRadioButtonMenuItems to colorMenu and register ActionListenersSet default selection and add horizontal separator31Create JCheckBoxMenuItemsAdd fontMenu to formatMenu and formatMenu to the JMenuBar32Determine the selected JRadioButtonMenuItemgetSource method returns a reference to the JRadioButtonMenuItem that generated the event33Called if the user selects a JCheckBoxMenuItem in the fontMenuDetermine whether either or both of the JCheckBoxMenuItems are selected34Look-and-Feel Observation 22.3  Mnemonics provide quick access to menu commands and button commands through the keyboard.35MenuMnemoniccharactersMenu bar36Menu itemsExpandedsubmenuSeparatorline37Look-and-Feel Observation 22.4 Different mnemonics should be used for each button or menu item. Normally, the first letter in the label on the menu item or button is used as the mnemonic. If several buttons or menu items start with the same letter, choose the next most prominent letter in the name (e.g., x is commonly chosen for a button or menu item called Exit). 3822.4  Using Menus with Frames (Cont.)showMessageDialog methodSpecifying the parent window helps determine where the dialog box will be displayedIf specified as null, the dialog box appears in the center of the screenOtherwise, it appears centered over the specified parent windowModal dialog boxDoes not allow any other window in the application to be accessed until the dialog box is dismissedDialog boxes are typically modal39Common Programming Error 22.3 Forgetting to set the menu bar with JFrame method setJMenuBar results in the menu bar not being displayed on the JFrame.40Look-and-Feel Observation 22.5 Menus appear left to right in the order that they are added to a JMenuBar.41Look-and-Feel Observation 22.6 A submenu is created by adding a menu as a menu item in another menu. When the mouse is positioned over a submenu (or the submenu’s mnemonic is pressed), the submenu expands to show its menu items. 42Look-and-Feel Observation 22.7 Separators can be added to a menu to group menu items logically.43Look-and-Feel Observation 22.8 Any lightweight GUI component (i.e., a component that is a subclass of JComponent) can be added to a JMenu or to a JMenuBar.4422.5  JPopupMenu Context-sensitive pop-up menusProvide options that are specific to the component for which the pop-up trigger event was generatedOn most systems, the pop-up trigger event occurs when the user presses and releases the right mouse buttonCreated with class JPopupMenu45Look-and-Feel Observation 22.9 The pop-up trigger event is platform specific. On most platforms that use a mouse with multiple buttons, the pop-up trigger event occurs when the user clicks the right mouse button on a component that supports a pop-up menu.46An instance of class ItemHandler will process the item events from the menu items47Create a JPopupMenu objectCreate and add JRadioButtonMenuItem and register ActionListenersRegister a MouseListener to handle the mouse events of the application window48If the pop-up trigger event occurred, JPopupMenu method show displays the JPopupMenuOrigin component and coordinates arguments determine where the JPopupMenu will appear49Determine which JRadioButtonMenuItem the user selected and set the background color5051Look-and-Feel Observation 22.10 Displaying a JPopupMenu for the pop-up trigger event of multiple GUI components requires registering mouse-event handlers for each of those GUI components.5222.6  Pluggable Look-and-Feel Java applications’ appearancesA program that uses Java’s Abstract Window Toolkit GUI components takes on the look-and-feel of the platformAllows users of the application on each platform to use GUI components with which they are already familiarAlso introduces interesting portability issuesSwing’s lightweight GUI components provide uniform functionality Define a uniform cross-platform look-and-feel (known as the metal look-and-feel)Also can customize the look-and-feel to appear as a Microsoft Windows-style, Motif-style (UNIX) or Macintosh look-and-feel53Portability Tip 22.1 GUI components look different on different platforms and may require different amounts of space to display. This could change their layout and alignments.54Portability Tip 22.2 GUI components on different platforms have different default functionality (e.g., some platforms allow a button with the focus to be “pressed” with the space bar, and some do not).555657Get the array of UIManager.LookAndFeelInfo objects that describe each look-and-feel available on your systemInvoke static method setLookAndFeel to change the look-and-feelInvoke static method updateComponentTreeUI to change the look-and-feel of every GUI component attached to the application58Call utility method changeTheLookAndFeel59Performance Tip 22.1 Each look-and-feel is represented by a Java class. UIManager method getInstalledLookAnd­Feels does not load each class. Rather, it provides the names of the available look-and-feel classes so that a choice can be made (presumably once at program start-up). This reduces the overhead of having to load all the look-and-feel classes even if the program will not use some of them.60616222.7  JDesktopPane and JInternalFrame Multiple-document interfaceA main window (called the parent window) contains other windows (called child windows)Manages several open documents that are being processed in parallelImplemented by Swing’s JDesktopPane and JInternalFrame63Create a JMenuBar, a JMenu and a JMenuItem64Add the JMenuItem to the JMenu and the JMenu to the JMenuBar and set the JMenuBar for the application windowThe JDesktopPane will be used to manage the JInternalFrame child windowsCreate a JInternalFrame objectConstructor arguments specify title bar string and whether or not the user can resize, close, maximize and minimize the internal frameSet the size of the child window65Add the JInternalFrame to theDesktop and display the JInternalFrame66Specify the panel’s preferred size for use by the pack method6768Internal FramesMinimizeMaximizeCloseMinimized internal framesPosition the mouse over any corner of a child window toresize the window (if resizing is allowed).69Maximized internal frame7022.8  JTabbedPane JTabbedPaneArranges GUI components into layers in which only one layer is visible at a timeWhen the user clicks a tab, the appropriate layer is displayedThe tabs can be positioned at top (default), left, right or bottomAny component can be placed on a tabIf the tabs do not fit on one line, they will wrap to form additional lines of tabs71Create an empty JTabbedPane with default settingsCall JTabbedPane method addTab with arguments that specify the tab’s string title, an Icon reference to display on the tab, the COMPONENT to display when the user clicks on the tab and the tab’s tooltip string72Add panel2 to tabbedPaneAdd panel3 to tabbedPane737422.9  Layout Managers: BoxLayout and GridBagLayout BoxLayout Layout ManagerArranges GUI components horizontally along a container’s x-axis or vertically along its y-axis75Fig. 22.15 | Additional layout managers. 76Create Box containers with static Box methods createHorizontalBox and createVerticalBoxAdd three JButtons to horizontal177Add three vertical struts and three JButtons to vertical1Add horizontal glue and three JButtons to horizontal2Add three rigid areas and three JButtons to vertical2Use Container method setLayout to set panel’s layout to a vertical BoxLayout78Add glue and three JButtons to panelCreate a JTabbedPane where the tabs should scroll if there are too many tabs to fit on one line7922.9  Layout Managers: BoxLayout and GridBagLayout (Cont.)Vertical strutsInvisible GUI component that has a fixed pixel heightUsed to guarantee a fixed amount of space between GUI componentsstatic Box method createVerticalStrutint argument determines the height of the strut in pixelsBox also declares method createHorizontalStrut8022.9  Layout Managers: BoxLayout and GridBagLayout (Cont.)Horizontal glueAn invisible GUI component that occupies additional space between fixed-size GUI componentsWhen the container is resized, components separated by glue remain the same size, but the glue stretches or contracts to occupy the space between themstatic Box methods createHorizontalGlue and createVerticalGlue81Arrows for cycling through tabs828322.9  Layout Managers: BoxLayout and GridBagLayout (Cont.)Rigid areasAn invisible GUI component that always has a fixed pixel width and heightDimension object argument to static Box method createRigidArea specifies the area’s width and height8422.9  Layout Managers: BoxLayout and GridBagLayout (Cont.)GridBagLayout Layout ManagerSimilar to GridLayout in that it arranges components in a grid, but more flexibleThe components can vary in size and can be added in any orderDetermining the appearance of the GUIDraw the GUI on paperDraw a grid over it, dividing the components into rows and columnsThe initial row and column numbers should be 0Used by the GridBagLayout layout manager to properly place the components in the grid8522.9  Layout Managers: BoxLayout and GridBagLayout (Cont.)GridBagConstraints objectDescribes how a component is placed in a GridBagLayoutanchor specifies the relative position of the component in an area that it does not fillConstants: NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST and CENTER (the default)fill defines how the component grows if the area in which it can be displayed is larger than the componentConstants: NONE (the default), VERTICAL, HORIZONTAL and BOTH8622.9  Layout Managers: BoxLayout and GridBagLayout (Cont.)gridx and gridy specify where the upper-left corner of the component is placed in the gridgridwidth and gridheight specify the number of columns and rows a component occupiesweightx and weighty specify how to distribute extra horizontal and vertical space to grid slots in a GridBagLayout when the container is resizedA zero value indicates that the grid slot does not grow in that dimension on its ownHowever, if the component spans a column/row containing a component with nonzero weight value, it will grow in the same proportion as the other components in that column/rowUse positive nonzero weight values to prevent “huddling”87Fig. 22.18 | Designing a GUI that will use GridBagLayout. Column0120123Row88Fig. 22.19 | GridBagConstraints fields. 89Fig. 22.20 | GridBagLayout with the weights set to zero. 90Create a GridBagLayout objectCreate a GridBagConstraints object91Cause the JTextArea to always fill its entire allocated areaCall utility method addComponent with the JTextArea object, row, column and numbers of columns and rows to span as argumentsWhen the window is resized, button2 will grow92button3 will still grow because of the weight values of button2Set constraints and add component93949522.9  Layout Managers: BoxLayout and GridBagLayout (Cont.)GridBagConstraints constantsRELATIVESpecifies that the next-to-last component in a particular row should be placed to the right of the previous component in the rowREMAINDERSpecifies that a component is the last component in a rowComponents that are not the second-to-last or last component on a row must specify values for gridwidth and gridheight96Create a GridBagLayout object97Specify that the JTextField is the last component on the lineSpecify that the JButton is to be placed relative to the previous componentThis JButton is the last component on the line98The JComboBox is the only component on the lineThis JButton is the only component on the lineThis JButton is the next-to-last component on the line99100101

Các file đính kèm theo tài liệu này:

  • pptjavahtp7e_22_4782_2488.ppt