1. Trang chủ
  2. » Công Nghệ Thông Tin

giáo trình Java By Example phần 3 pot

57 367 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 138,35 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

To add these menus, you first create objects of the Menu class for each menu youwant in the menu bar, like this: Menu fileMenu = new Menu"File"; Menu editMenu = new Menu"Edit"; Menu opti

Trang 1

MenuBar menuBar = new MenuBar( );

As you can see, the MenuBar( ) constructor requires no arguments

After you've created the MenuBar object, you have to tell Java to associate the menu bar with the framewindow You do this by calling the window's setMenuBar( ) method:

setMenuBar(menuBar);

At this point, you have an empty menu bar associated with the window In the next steps, you add menus

to the menu bar

Adding Menus to a Menu Bar

A menu bar is the horizontal area near the top of a window that contains the names of the menus

contained in the menu bar After creating and setting the MenuBar object, you have the menu bar, but itcontains no menus To add these menus, you first create objects of the Menu class for each menu youwant in the menu bar, like this:

Menu fileMenu = new Menu("File");

Menu editMenu = new Menu("Edit");

Menu optionMenu = new Menu("Options");

The Menu class's constructor takes a single argument, which is the string that'll appear as the menu'sname on the menu bar The example lines above create three menus for the menu bar

After creating the Menu objects, you have to add them to the menu bar, which you do by calling theMenuBar object's add( ) method, like this:

Trang 2

names, no pop-up menus would appear.

Figure 23.4 : This window's menu bar contains three empty menus.

Adding Menu Items to Menus

You may have empty menus at this point, but you're about to remedy that problem To add items to yourmenus, you first create objects of the MenuItem or CheckboxMenuItem classes for each menu itemyou need To add items to the Options menus you made previously, you might use Java code somethinglike this:

MenuItem option1 = new MenuItem("Option 1");

MenuItem option2 = new MenuItem("Option 2");

MenuItem option3 = new MenuItem("Option 3");

The MenuItem constructor takes as its single argument the string that'll be displayed in the menu forthis item

If you're thinking that, after you create the menu items, you must call the appropriate Menu object'sadd( ) method, you're be exactly right Those lines might look like this:

Trang 3

Example: Using a Menu Bar in a Frame Window

Now that you have this menu bar business mastered, it's time to put what you've learned to work Listing23.4 is an applet called MenuBarApplet This applet displays a single button, which, when selected,displays a frame window with a menu bar This menu bar contains a single menu with three items Thefirst two items are regular MenuItem objects The third item is CheckboxMenuItem, which is amenu item that can display a check mark Figure 23.6 shows MenuBarApplet with its frame windowdisplayed and the Test menu visible (Notice the menu separator above the checked item.)

Figure 23.6 : This is MenuBarApplet's frame window and menu bar.

Listing 23.4 MenuBarApplet.java: An Applet That Uses a Menu Bar.

frame = new MenuBarFrame("MenuBar Window");

button = new Button("Show Window");

add(button);

}

Trang 4

public boolean action(Event evt, Object arg)

Trang 6

str = "You selected Command 1";

else if (arg == "Command 2")

str = "You selected Command 2";

else if (arg == "Check")

str = "You selected the Check item";

repaint();

return true;

Trang 7

Tell Java that the applet uses the classes in the awt package.

Tell Java that the applet uses the classes in the applet package

Derive the MenuBarApplet class from Java's Applet class

Declare the custom frame-window and button objects

Override the init( ) method

Create the custom frame window

Create and add the button component

Override the action( ) method

Determine whether the window is visible

If the window is visible

Hide the window

Change the button's label to "Show Window."

Else if the window is hidden

Show the window

Change the button's label to "Hide Window."

Tell Java that the message was handled okay

Derive the MenuBarFrame class from Java's Frame class

Declare the class's menu bar and string objects

Define the class's constructor

Pass the title string on to the Frame class

Create and set the menu bar

Create and add the Test menu

Create and add two regular menu items

Create and add a menu separator

Create and add a checkmark menu item

Initialize the class's display string and font

Override the window's paint( ) method

Resize the window

Show the display string in the window

Override the action( ) method

if a menu item was selected

Respond to the selected menu

Repaint the window, so the new string is displayed

Trang 8

Return true if the message was handled.

Or else return false so Java knows the event is unhandled

NOTE

To determine the state (checked or unchecked) of aCheckboxMenuItem object, you can call its getState( )method This method returns true if the item is checked and false

if the item is unchecked In addition, you can set the item's state bycalling its setState( ) method

As you can see from MenuBarApplet's source code, you respond to menu-item selections in the sameway you respond to other events in applets This time, however, you have overridden two action( )methods The first is in the MenuBarApplet class and handles the applet's single button The secondoverridden action( ) method, which is the one that handles the menu items, is in the

MenuBarFrame class

Summary

Although it's an ability you may not frequently take advantage of, Java applets can display windows TheFrame class makes this possible, by providing the functionality for frame windows, which can be sized,moved, used to display components, and much more A frame window can, in fact, even have a

full-featured menu bar, just like the menu bars you see in many Windows applications Creating a menubar, however, requires knowing how to create and manipulate MenuBar, Menu, MenuItem, and

CheckboxMenuItem objects Luckily, you learned about those classes in this chapter, so you're allready to amaze the world with your Java frame windows

Trang 9

a second time, the second window should disappear and the command should be unchecked.

Figure 23.7 shows the resultant applet in action (You can find the solution to this exercise in theCHAP23 folder of this book's CD-ROM.)

Figure 23.7 : This is MenuFrameApplet running under Appletviewer.

4

Trang 10

The FlowLayout Manager

Example: Creating a FlowLayout Manager

The GridLayout Manager

Creating a GridLayout Manager

The BorderLayout Manager

Creating a BorderLayout Manager

The CardLayout Manager

The CardLayout Manager Methods

Example: Creating a CardLayout Manager

The GridBagLayout Manager

Creating and Setting the GridBagLayout Manager

Trang 11

A panel is a special type of container object that acts as a parent to other components that you want toorganize in your applet For example, you can add several panels to an applet, each with their own

layout By using panels in this way, you can create many different creative displays Creating a panel is

as easy as calling the Panel class's constructor, like this:

Panel panel = new Panel();

As you can see, the Panel class's constructor requires no arguments

Once you create a panel, you add it to the applet in the normal way, by calling the add() method:

add(panel);

Example: Creating and Using Panels

Using panels can be a little confusing at first, so an example is in order Suppose you need to create anapplet that displays four buttons, but you don't want Java to place the buttons one after the other in thedisplay, which Java will do with its default layout Instead, you want the buttons displayed in two rows

of two One way to accomplish this feat is to add two panels to the applet and then add two buttons toeach panel Listing 22.1 shows how this is done, whereas Figure 22.1 shows what the display looks like

Figure 22.1 : Using panels, you can more easily organize components in an applet.

Listing 22.1 PanelApplet.java: Using Panels.

Trang 12

Button button1, button2, button3, button4;

public void init()

{

panel1 = new Panel();

panel2 = new Panel();

add(panel1);

add(panel2);

button1 = new Button("Button1");

button2 = new Button("Button2");

button3 = new Button("Button3");

button4 = new Button("Button4");

Tell Java that the applet uses the classes in the awt package

Tell Java that the applet uses the classes in the applet package

Trang 13

Derive the PanelApplet class from Java's Applet class.

Declare the panel and button objects

Override the init() method

Create the panels

Add the panels to the applet

Create the four buttons

Add the buttons to the panels

Notice how, when adding the panels to the applet, the program calls the PanelApplet class's add()method (which adds the panels to the applet's display) However, when adding the buttons, the programcalls the panel objects' add() method (which adds the buttons to the panels) This is how you build ahierarchy of components into your applets In this case, you've got a stack of components three high, withthe applet's display on the bottom, the two panels on top of that, and the four buttons on top of the panels

As you create more sophisticated applets, this type of component stacking will be more common

Panels are kind of a "plain vanilla" container for organizing components in an applet As you'll discover

in the next section, you can combine panels with layout managers to create truly complex displays

The FlowLayout Manager

In the previous section, I mentioned that, when you create an applet, Java assigns to it a default layoutmanager It just so happens that this default manager is an object of the FlowLayout class The

FlowLayout manager places controls, in the order in which they're added, one after the other in

horizontal rows When the layout manager reaches the right border of the applet, it begins placing

controls on the next row In its default state, the FlowLayout manager centers controls on each row.However, you can set the alignment when you create the layout manager for your applet, like this:

Trang 14

FlowLayout layout = new FlowLayout(align, hor, ver);

SetLayout(layout);

The FlowLayout constructor takes three arguments, which are the alignment (FlowLayout.LEFT,FlowLayout.CENTER, or FlowLayout.RIGHT), the horizontal spacing between components, andthe vertical spacing

Example: Creating a FlowLayout Manager

Suppose that you want to arrange three buttons in an applet using a FlowLayout manager set to leftalignment Listing 22.2 shows how you'd create the manager and the buttons for the applet Figure 22.2shows the resultant control layout Figures 22.3, and 22.4 show the center and right alignments for thesame controls

Figure 22.2 : These buttons are left aligned by the FlowLayout manager.

Figure 22.3 : These buttons are center aligned by the FlowLayout manager.

Figure 22.4 : These buttons are right aligned by the FlowLayout manager.

Listing 22.2 LST22_2.TXT: Creating a FlowLayout Manager.

FlowLayout layout =

new FlowLayout(FlowLayout.LEFT, 10, 10);

setLayout(layout);

button1 = new Button("Button1");

button2 = new Button("Button2");

button3 = new Button("Button3");

add(button1);

add(button2);

add(button3);

Trang 15

The FlowLayout() constructor shown in this chapter takes fourarguments However, you can actually construct a FlowLayoutobject with no arguments, FlowLayout(), or with a singleargument for the alignment, FlowLayout(FlowLayout.LEFT)

Many of Java's classes have multiple constructors

The GridLayout Manager

Once you start creating more sophisticated applets, you'll quickly discover that the FlowLayout

manager may not give you the control you need to create the kind of display you want for your applet.When you need more control over the placement of components, you can try out the GridLayoutmanager

Java's GridLayout manager organizes your applet's display into a rectangular grid, similar to the gridused in a spreadsheet Java then places the components you create for the applet into each cell of the grid,working from left to right and top to bottom You create a GridLayout manager like this:

GridLayout layout = new GridLayout(rows, cols, hor, ver);

SetLayout(layout);

The constructor's four arguments are the number of rows in the grid, the number of columns, and thehorizontal and vertical space between the grid cells

Creating a GridLayout Manager

To test the GridLayout manager, suppose you want to place four buttons into a 2x2 grid, with nospace between the buttons Listing 22.3 shows how you'd create the manager and the buttons for theapplet Figure 22.5 shows the resultant control layout Figure 22.6 shows the same layout manager,

except created with horizontal and vertical spacing of 10, and Figure 22.7 shows the layout with a singlerow of four cells

Figure 22.5 : This GridLayout manager is set to two rows and two columns.

Figure 22.6 : This is the same GridLayout manager with horizontal and vertical spacing.

Figure 22.7 : This GridLayout manager has one row and four columns.

Listing 22.3 LST22_3.TXT: Creating a GridLayout Manager.

Trang 16

GridLayout layout =

new GridLayout(2, 2, 0, 0);

setLayout(layout);

button1 = new Button("Button1");

button2 = new Button("Button2");

button3 = new Button("Button3");

button4 = new Button("Button4");

add(button1);

add(button2);

add(button3);

add(button4);

The BorderLayout Manager

You'll probably use the GridLayout manager most of the time, but there may be cases where you need

to put together something a little more unusual One layout you can try is provided by the

BorderLayout manager, which enables you to position components using the directions north, south,east, west, and center You create a BorderLayout manager object like this:

BorderLayout layout = new BorderLayout(hor, ver);

setLayout(layout);

This constructor's two arguments are the horizontal and vertical spacing between the cells in the layout.After you create the BorderLayout object, you must add the components using a different version ofthe add() method:

add(position, object);

Trang 17

Here, position is where to place the component and must be the string North, South, East,

West, or Center The second argument, object, is the component you want to add to the applet

Creating a BorderLayout Manager

Suppose you have five buttons that you want to place in the five areas supported by a BorderLayoutmanager First, you create and set the manager Then, you create the five buttons and add them to theapplet, using the special version of add() that includes the object's position as the first argument

Listing 22.4 shows how this is done Figure 22.8 shows the resultant display, whereas Figure 22.9 showsthe same applet with the BorderLayout manager with horizontal and vertical spacing

Figure 22.9 : This is the same applet with horizontal and vertical spacing.

Figure 22.8 : This applet displays five buttons using a BorderLayout manager.

Listing 22.4 LST22_4.TXT: Creating a BorderLayout Manager.

BorderLayout layout = new BorderLayout(0, 0);

setLayout(layout);

button1 = new Button("Button1");

button2 = new Button("Button2");

button3 = new Button("Button3");

button4 = new Button("Button4");

button5 = new Button("Button5");

Trang 18

The CardLayout Manager

One of the most complex layout managers is CardLayout Using this manager, you can create a stack

of layouts not unlike a stack of cards and then flip from one layout to another This type of display

organization is not unlike Windows 95's tabbed dialogs, usually called property sheets To create a layoutwith the CardLayout manager, you first create a parent panel to hold the "cards." Then, you create theCardLayout object and set it as the panel's layout manager Finally, you add each "card" to the layout

by creating the components and adding them to the panel

To create a CardLayout manager, call its constructor and then add it to the applet, like this:

CardLayout cardLayout = new CardLayout(hor, ver);

panel.setLayout(cardLayout);

The constructor's two arguments are the horizontal and vertical spacing

The CardLayout Manager Methods

Because the CardLayout manager enables you to switch between a stack of layouts, you need someway to tell the manager what to do For this reason, the CardLayout manager has a number of publicmethods that you can call to specify which card is visible on the screen Table 22.1 lists the most useful

of these methods along with their descriptions

Table 22.1 CardLayout Manager Methods.

first(Container parent) Displays the first card

last(Container parent) Displays the last card

next(Container parent) Displays the next card

previous(Container parent) Displays the previous card

show(Container parent, String name) Displays the specified card

Example: Creating a CardLayout Manager

Putting the CardLayout manager to work is a lot easier if you always keep in mind the hierarchy ofcomponents At the bottom of the stack is the applet's display area On top of this stack is the component(usually a panel) that will hold the "cards." On top of the parent component is the CardLayout

manager, which you can think of as a deck of cards The cards in this deck are the components that youadd to the panel

Listing 22.5 is an applet that demonstrates how all this works The cards in this applet are the three

buttons When you run the applet, you see a single button in the display (Figure 22.10) Click the button

Trang 19

to switch to the next button in the stack When you get to button three and click it, you end up back atbutton one You can cycle through the buttons as often as you like.

Figure 22.10 : Clicking the button switches the manager to a new card.

Listing 22.5 CardApplet.java: Using a CardLayout Manager.

Button button1, button2, button3;

public void init()

button1 = new Button("Button1");

button2 = new Button("Button2");

Trang 20

button3 = new Button("Button3");

Tell Java that the applet uses the classes in the awt package

Tell Java that the applet uses the classes in the applet package

Derive the CardApplet class from Java's Applet class

Declare the layout, panel, and button objects

Override the init() method

Create and add the parent panel

Create and set the layout

Create the buttons (which act as the cards)

Add the buttons to the panel

Override the action() method

Switch to the next card (button)

Tell Java that the event was handled okay

NOTE

Trang 21

The stack of cards that are arranged by a CardLayout manager can

be any type of component For example, you can create severaldifferent panels, each with their own controls, and switch between thepanels This enables you to switch between whole sets of controls,just like Windows 95's property sheets

The GridBagLayout Manager

The most complex of the layout managers is GridBagLayout, which pretty much lets you organizeobjects any way you like However, the price for this power is meticulous planning and a lot of

experimentation At the time of this writing, the documentation for the GridBagLayout manager wassketchy and incomplete I did the best I could to figure out exactly how this layout manager worked, butthere's no question that to get the best out of GridBagLayout, you're going to have to spend sometime experimenting with different layouts

To create a layout using GridBagLayout, you must follow these steps:

Create a GridBagLayout object

Creating and Setting the GridBagLayout Manager

To create a GridBagLayout manager, call the class's constructor, like this:

GridBagLayout layout = new GridBagLayout();

The constructor requires no arguments When you've created the GridBagLayout() object, set themanager by calling setLayout():

setLayout(layout);

This method's single argument is a reference to the layout object

Trang 22

Creating and Setting a GridBagConstraints Object

Because the position of each component in a layout controlled by a GridBagLayout object is

determined by the currently set GridBagConstraints object, you must create the

GridBagConstraints object before you can start building your layout To do this, call the class'sconstructor:

GridBagConstraints constraints = new GridBagConstraints();

Like the GridBagLayout class, the GridBagConstraints constructor requires no arguments.However, although the class's fields start off initialized to default values, you'll almost always changesome of those values before adding components to the layout You perform this task with lines

something like this:

anchor Where within a component's area the component should be

placed Predefined values areGridBagConstraints.NORTH,GridBagConstraints.NORTHEAST,GridBagConstraints.EAST,

GridBagConstraints.SOUTHEAST,GridBagConstraints.SOUTH,GridBagConstraints.SOUTHWEST,GridBagConstraints.WEST,

GridBagConstraints.NORTHWEST, andGridBagConstraints.CENTER

fill Determines how to size a component when the display area is

larger than the component Predefined values you can use areGridBagConstraint.NONE,

GridBagConstraint.HORIZONTAL,GridBagConstraint.VERTICAL, andGridBagConstraint.BOTH

gridheight The number of cells in each column of a component's display

area

Trang 23

gridwidth The number of cells in each row of a component's display area.

gridx The X coordinate of the cell at the upper left of a component's

display area

gridy The Y coordinate of the cell at the upper left of the component's

display area

insets The minimum amount of space between a component and the

edges of its display area

ipadx The amount of horizontal space around a component

ipady The amount of vertical space around a component

weightx Determines whether components stretch horizontally to fill the

applet's display area

weighty Determines whether components stretch vertically to fill the

applet's display area

Once you have the GridBagConstraints object created and initialized, you must set the constraints

by calling the layout object's setConstraints() method:

Example: Using a GridBagLayout Manager in an Applet

As I said before, the only way to really understand how the GridBagLayout manager works is toexperiment with it on your own This book just doesn't have the room to cover every detail of using thiscomplex manager Still, I won't send you off without at least the basics So, Listing 22.6 is an applet,called GridBagApplet, that demonstrates how to create and use a GridBagLayout manager Figure22.11 shows what the applet looks like when it's run under Appletviewer

Figure 22.11 : GridBagLayout manager enables you to create unusual layouts.

Listing 22.6 GridBagApplet.java: A GridBagLayout Applet.

import java.awt.*;

import java.applet.*;

Trang 24

public class GridBagApplet extends Applet

GridBagConstraints constraints = new GridBagConstraints();

Button button1 = new Button("Button1");

Button button2 = new Button("Button2");

Button button3 = new Button("Button3");

Button button4 = new Button("Button4");

Button button5 = new Button("Button5");

Button button6 = new Button("Button6");

Button button7 = new Button("Button7");

Button button8 = new Button("Button8");

Button button9 = new Button("Button9");

constraints.fill = GridBagConstraints.BOTH;

Trang 26

Tell Java that the applet uses the classes in the awt package.

Tell Java that the applet uses the classes in the applet package

Derive the GridBagApplet class from Java's Applet class

Override the init() method

Create and set the layout

Create the constraints object

Create nine buttons

Initialize the fill for both vertical and horizontal

Set the constraints for the buttons and add the buttons

Set the applet's size

Trang 27

Understanding the GridBagApplet Applet

Although GridBagApplet contains only the init() method, there's a lot going on in the program

In this section, you'll see, line by line, exactly how the applet works The first two lines in the init()method look like this:

GridBagLayout layout = new GridBagLayout();

setLayout(layout);

This is where the applet creates its GridBagLayout object and sets it as the applet's layout In the nextline, the applet creates its GridBagConstraints object, like this:

GridBagConstraints constraints = new GridBagConstraints();

The applet will use this single GridBagConstraints object in order to set the constraints for eachcomponent added to the layout Before components can be added, however, they must be created, whichthe applet does as shown in Listing 22.7

Listing 22.7 LST22_7.TXT: Creating the Applet's Buttons.

Button button1 = new Button("Button1");

Button button2 = new Button("Button2");

Button button3 = new Button("Button3");

Button button4 = new Button("Button4");

Button button5 = new Button("Button5");

Button button6 = new Button("Button6");

Button button7 = new Button("Button7");

Button button8 = new Button("Button8");

Button button9 = new Button("Button9");

Trang 28

After creating the buttons, the program can start adding them to the layout But before the first buttongets added, the constraints object must contain the appropriate values In this case, only the fill fieldmust be initialized, since the first button component will use all the other default values:

constraints.fill = GridBagConstraints.BOTH;

Setting the fill field to both ensures that the components (in this case, buttons) will expand both

vertically and horizontally to completely fill their display areas After initializing the constraints for thefirst button, the applet sets the constraints and adds the button:

layout.setConstraints(button1, constraints);

add(button1);

Now that you have the first button added, it's time to consider how the second button will fit in the

layout The value the applet initialized the fill field to will remain in effect for all buttons, so the

applet doesn't need to change it again However, the layout manager is going to want to know how

button2 should be placed The following lines set the constraints and add the button:

Ngày đăng: 22/07/2014, 16:21

TỪ KHÓA LIÊN QUAN