Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Intro_Java_brief_Liang2011.pdf
Скачиваний:
195
Добавлен:
26.03.2016
Размер:
10.44 Mб
Скачать

572 Chapter 17 Creating Graphical User Interfaces

 

17.1 Introduction

GUI

A graphical user interface (GUI) makes a system user friendly and easy to use. Creating a

 

GUI requires creativity and knowledge of how GUI components work. Since the GUI compo-

 

nents in Java are very flexible and versatile, you can create a wide assortment of useful user

 

interfaces.

 

Many Java IDEs provide tools for visually designing and developing GUI interfaces. This

 

enables you to rapidly assemble the elements of a user interface (UI) for a Java application or

 

applet with minimum coding. Tools, however, cannot do everything. You have to modify the

 

programs they produce. Consequently, before you begin to use the visual tools, you must

 

understand the basic concepts of Java GUI programming.

 

Previous chapters briefly introduced several GUI components. This chapter introduces the

 

frequently used GUI components in detail (see Figure 17.1). (Since this chapter introduces no

 

new concepts, instructors may assign it for students to study on their own.)

 

 

 

JButton

 

Component

Container

JComponent

AbstractButton

JCheckBox

 

 

 

JToggleButton

 

 

 

 

JLabel

JRadioButton

 

 

 

 

 

 

 

JTextArea

 

 

 

 

JTextComponent

 

 

 

 

JTextField

JPasswordField

 

 

 

JComboBox

 

 

 

 

JList

 

 

 

 

JScrollBar

 

 

 

 

JSlider

 

FIGURE 17.1 These Swing GUI components are frequently used to create user interfaces.

 

Note

 

Throughout this book, the prefixes jbt, jchk, jrb, jlbl, jtf, jpf, jta, jcbo, jlst,

naming convention for

jscb, and jsld are used to name reference variables for JButton, JCheckBox,

components

JRadioButton, JLabel, JTextField, JPasswordField, JTextArea, JComboBox,

 

JList, JScrollBar, and JSlider.

 

17.2 Buttons

 

A button is a component that triggers an action event when clicked. Swing provides regular

 

buttons, toggle buttons, check box buttons, and radio buttons. The common features of these

AbstractButton

buttons are defined in javax.swing. AbstractButton, as shown in Figure 17.2.

JButton

This section introduces the regular buttons defined in the JButton class. JButton inherits

 

AbstractButton and provides several constructors to create buttons, as shown in Figure 17.3.

 

17.2.1 Icons, Pressed Icons, and Rollover Icons

A regular button has a default icon, a pressed icon, and a rollover icon. Normally you use the default icon. The other icons are for special effects. A pressed icon is displayed when a button is pressed, and a rollover icon is displayed when the mouse is over the button but not pressed.

17.2 Buttons 573

javax.swing.JComponent

The get and set methods for these data fields are provided in the class, but omitted in the UML diagram for brevity.

javax.swing.AbstractButton

-actionCommand: String -text: String

-icon: javax.swing.Icon

-pressedIcon: javax.swing.Icon -rolloverIcon: javax.swing.Icon -mnemonic: int

-horizontalAlignment: int -horizontalTextPosition: int -verticalAlignment: int -verticalTextPosition: int -borderPainted: boolean

-iconTextGap: int -selected(): boolean

FIGURE 17.2 AbstractButton defines common features of different types of buttons.

javax.swing.AbstractButton

javax.swing.JButton

+JButton()

+JButton(icon: javax.swing.Icon) +JButton(text: String) +JButton(text: String, icon: Icon)

+addActionListener(listener: ActionListener) : void

FIGURE 17.3 JButton defines a regular push button.

For example, Listing 17.1 displays the American flag as a regular icon, the Canadian flag as a pressed icon, and the British flag as a rollover icon, as shown in Figure 17.4.

LISTING 17.1 TestButtonIcons.java

1

import

javax.swing.*;

2

public

class TestButtonIcons extends JFrame {

3

4

public static

void main(String[] args) {

5

//

Create a

frame and set its properties

6JFrame frame = new TestButtonIcons();

7 frame.setTitle("ButtonIcons");

8frame.setSize(200, 100);

9 frame.setLocationRelativeTo(null); // Center the frame

10 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

574 Chapter 17

Creating Graphical User Interfaces

 

11

 

frame.setVisible(true);

 

12

}

 

 

 

 

 

 

13

public TestButtonIcons() {

 

14

create icons

15

 

ImageIcon usIcon = new ImageIcon("image/usIcon.gif");

 

16

 

ImageIcon caIcon = new ImageIcon("image/caIcon.gif");

 

17

 

ImageIcon ukIcon = new ImageIcon("image/ukIcon.gif");

 

18

 

JButton jbt = new JButton("Click it",

 

 

regular icon

19

 

usIcon);

 

pressed icon

20

 

jbt.setPressedIcon(caIcon);

 

 

rollover icon

21

 

jbt.setRolloverIcon(ukIcon);

 

 

 

 

 

22

 

 

 

 

 

 

add a button

23

}

add(jbt);

 

24

 

 

 

 

 

 

25

}

 

 

 

 

 

(a) Default icon

(b) Pressed icon

(c) Rollover icon

FIGURE 17.4 A button can have several types of icons.

 

17.2.2 Alignments

horizontal alignment

Horizontal alignment specifies how the icon and text are placed horizontally on a button.

 

You can set the horizontal alignment using setHorizontalAlignment(int) with one of

 

the five constants LEADING, LEFT, CENTER, RIGHT, TRAILING, as shown in Figure 17.5. At

 

present, LEADING and LEFT are the same, and TRAILING and RIGHT are the same. Future

 

implementation may distinguish them. The default horizontal alignment is SwingCon-

 

stants.CENTER.

Horizontally left

Horizontally center

Horizontally right

FIGURE 17.5 You can specify how the icon and text are placed on a button horizontally.

vertical alignment

Vertical alignment specifies how the icon and text are placed vertically on a button. You

 

can set the vertical alignment using setVerticalAlignment(int) with one of the three

 

constants TOP, CENTER, BOTTOM, as shown in Figure 17.6. The default vertical alignment is

 

SwingConstants.CENTER.

Vertically top

Vertically center

Vertically bottom

FIGURE 17.6 You can specify how the icon and text are placed on a button vertically.

17.2 Buttons 575

17.2.3Text Positions

Horizontal text position specifies the horizontal position of the text relative to the icon. You can horizontal text position set the horizontal text position using setHorizontalTextPosition(int) with one of the

five constants LEADING, LEFT, CENTER, RIGHT, TRAILING, as shown in Figure 17.7. At present, LEADING and LEFT are the same, and TRAILING and RIGHT are the same. Future implementation may distinguish them. The default horizontal text position is SwingConstants.RIGHT.

Text positioned left

Text positioned center

Text positioned right

FIGURE 17.7 You can specify the horizontal position of the text relative to the icon.

Vertical text position specifies the vertical position of the text relative to the icon. You can vertical text position set the vertical text position using setVerticalTextPosition(int) with one of the three

constants TOP, CENTER, BOTTOM, as shown in Figure 17.8. The default vertical text position is

SwingConstants.CENTER.

Text positioned top

Text positioned

Text positioned bottom

 

vertically center

 

FIGURE 17.8 You can specify the vertical position of the text relative to the icon.

Note

The constants LEFT, CENTER, RIGHT, LEADING, TRAILING, TOP, and BOTTOM used in

AbstractButton are also used in many other Swing components. These constants are centrally defined in the javax.swing.SwingConstants interface. Since all Swing GUI components

implement SwingConstants, you can reference the constants through SwingConstants or a SwingConstants GUI component. For example, SwingConstants.CENTER is the same as JButton.CENTER.

JButton can fire many types of events, but often you need to add listeners to respond to an ActionEvent. When a button is pressed, it fires an ActionEvent.

17.2.4Using Buttons

This section presents a program, shown in Listing 17.2, that displays a message on a panel and uses two buttons, <= and =>, to move the message on the panel to the left or right. The layout of the UI is shown in Figure 17.9.

Here are the major steps in the program:

1.Create the user interface.

Create a MessagePanel object to display the message. The MessagePanel class was created in Listing 15.8, MessagePanel.java. Place it in the center of the frame. Create two buttons, <= and =>, on a panel. Place the panel in the south of the frame.

Video Note

Use buttons

576Chapter 17 Creating Graphical User Interfaces

2.Process the event.

Create and register listeners for processing the action event to move the message left or right according to whether the left or right button was clicked.

MessagePanel

JPanel with

FlowLayout

FIGURE 17.9 Clicking the <= and => buttons causes the message on the panel to move to the left and right, respectively.

LISTING 17.2 ButtonDemo.java

 

1

import java.awt.*;

 

 

2

import java.awt.event.ActionListener;

 

 

3

import java.awt.event.ActionEvent;

 

 

 

 

JFrame

 

4

import javax.swing.*;

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

6

public class ButtonDemo extends JFrame {

 

ButtonDemo

 

7

 

// Create a panel for displaying message

 

 

 

8

 

protected MessagePanel messagePanel

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

= new MessagePanel("Welcome to Java");

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

11

 

// Declare two buttons to move the message left and right

 

12

 

private JButton jbtLeft = new JButton("<=");

 

 

 

 

13

 

private JButton jbtRight = new JButton("=>");

 

 

 

 

14

 

 

 

 

 

 

 

 

 

 

 

15

 

public static void main(String[] args) {

 

create frame

16

 

 

ButtonDemo frame = new ButtonDemo();

 

 

17

 

 

frame.setTitle("ButtonDemo");

 

 

18

 

 

frame.setSize(250, 100);

 

 

19

 

 

frame.setLocationRelativeTo(null); // Center the frame

 

20

 

 

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

 

21

 

 

frame.setVisible(true);

 

 

22

 

}

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

24

 

public ButtonDemo() {

 

create UI

25

 

 

// Set the background color of messagePanel

 

 

26

 

 

messagePanel.setBackground(Color.white);

 

 

27

 

 

 

 

 

 

 

 

 

 

 

28

 

 

// Create Panel jpButtons to hold two Buttons "<=” and “right =>"

 

29

 

 

JPanel jpButtons = new JPanel();

 

 

30

 

 

jpButtons.add(jbtLeft);

 

 

31

 

 

jpButtons.add(jbtRight);

 

 

32

 

 

 

 

 

 

 

 

 

 

 

33

 

 

// Set keyboard mnemonics

 

mnemonic

34

 

 

jbtLeft.setMnemonic('L');

 

 

 

 

 

 

 

 

35

 

 

jbtRight.setMnemonic('R');

 

 

36

 

 

 

 

 

 

 

 

 

 

 

37

 

 

// Set icons and remove text

 

 

38

//

 

jbtLeft.setIcon(new ImageIcon("image/left.gif"));

 

 

39

//

 

jbtRight.setIcon(new ImageIcon("image/right.gif"));

 

 

40

//

 

jbtLeft.setText(null);

 

 

 

 

 

17.2 Buttons 577

41

//

jbtRight.setText(null);

 

42

 

 

 

 

43

 

// Set tool tip text on the buttons

 

44

 

jbtLeft.setToolTipText("Move message to left");

 

tool tip

45

 

jbtRight.setToolTipText("Move message to right");

 

46

 

 

 

 

47// Place panels in the frame

48setLayout(new BorderLayout());

49add(messagePanel, BorderLayout.CENTER);

50add(jpButtons, BorderLayout.SOUTH);

51

 

 

52

// Register listeners with the buttons

 

53

jbtLeft.addActionListener(new ActionListener() {

register listener

54public void actionPerformed(ActionEvent e) {

55messagePanel.moveLeft();

56}

57});

58

jbtRight.addActionListener(new ActionListener() {

register listener

59public void actionPerformed(ActionEvent e) {

60messagePanel.moveRight();

61}

62});

63}

64}

messagePanel (line 8) is deliberately declared protected so that it can be referenced by a subclass in future examples.

You can set an icon image on the button by using the setIcon method. If you uncomment the following code in lines 38–41:

//jbtLeft.setIcon(new ImageIcon("image/left.gif"));

//jbtRight.setIcon(new ImageIcon("image/right.gif"));

//jbtLeft.setText(null);

//jbtRight.setText(null);

the texts are replaced by the icons, as shown in Figure 17.10(a). "image/left.gif" is located in "c:\book\image\left.gif". Note that the backslash is the Windows file-path notation. In Java, the forward slash should be used.

(a)

(b)

(c)

FIGURE 17.10 You can set an icon on a JButton and access a button using its mnemonic key.

You can set text and an icon on a button at the same time, if you wish, as shown in Figure 17.10(b). By default, the text and icon are centered horizontally and vertically.

The button can also be accessed by using the keyboard mnemonics. Pressing Alt+ L is equivalent to clicking the <= button, since you set the mnemonic property to 'L' in the left button (line 34). If you change the left button text to "Left" and the right button text to "Right", the L and R in the captions of these buttons will be underlined, as shown in Figure 17.10(b).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]