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

578 Chapter 17

Creating Graphical User Interfaces

 

Each button has a tool tip text (lines 44–45), which appears when the mouse is set on the

 

button without being clicked, as shown in Figure 17.10(c).

 

Note

locating MessagePanel

Since MessagePanel is not in the Java API, you should place MessagePanel.java in the same

 

directory with ButtonDemo.java.

toggle button

Video Note

Use check boxes

17.3 Check Boxes

A toggle button is a two-state button like a light switch. JToggleButton inherits AbstractButton and implements a toggle button. Often JToggleButton's subclasses JCheckBox and JRadioButton are used to enable the user to toggle a choice on or off. This section introduces JCheckBox. JRadioButton will be introduced in the next section.

JCheckBox inherits all the properties from AbstractButton, such as text, icon, mnemonic, verticalAlignment, horizontalAlignment, horizontalTextPosition, verticalTextPosition, and selected, and provides several constructors to create check boxes, as shown in Figure 17.11.

Adds an ActionListener for this object.

Adds an ItemListener for this object.

FIGURE 17.11 JCheckBox defines a check box button.

Here is an example of a check box with text Student, foreground red, background white, mnemonic key 'S', and initially selected.

JCheckBox jchk = new JCheckBox("Student", true); jchk.setForeground(Color.RED); jchk.setBackground(Color.WHITE); jchk.setMnemonic('S');

When a check box is clicked (checked or unchecked), it fires an ItemEvent and then an ActionEvent. To see if a check box is selected, use the isSelected() method.

Listing 17.3 gives a program that adds three check boxes named Centered, Bold, and Italic to the preceding example to let the user specify whether the message is centered, bold, or italic, as shown in Figure 17.12.

17.3 Check Boxes 579

JPanel with GridLayout for three check boxes

FIGURE 17.12 Three check boxes are added to specify how the message is displayed.

There are at least two approaches to writing this program. The first is to revise the preceding ButtonDemo class to insert the code for adding the check boxes and processing their events. The second is to create a subclass that extends ButtonDemo. Please implement the first approach as an exercise. Listing 17.3 gives the code to implement the second approach.

LISTING 17.3 CheckBoxDemo.java

1 import java.awt.*;

2 import java.awt.event.*;

3 import javax.swing.*;

4

5 public class CheckBoxDemo extends ButtonDemo {

6 // Create three check boxes to control the display of message 7 private JCheckBox jchkCentered = new JCheckBox("Centered");

8private JCheckBox jchkBold = new JCheckBox("Bold");

9 private JCheckBox jchkItalic = new JCheckBox("Italic");

10

11public static void main(String[] args) {

12CheckBoxDemo frame = new CheckBoxDemo();

13frame.setTitle("CheckBoxDemo");

14frame.setSize(500, 200);

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

16frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

17frame.setVisible(true);

18}

19

20public CheckBoxDemo() {

21// Set mnemonic keys

22jchkCentered.setMnemonic('C');

23jchkBold.setMnemonic('B');

24jchkItalic.setMnemonic('I');

26// Create a new panel to hold check boxes

27JPanel jpCheckBoxes = new JPanel();

28jpCheckBoxes.setLayout(new GridLayout(3, 1));

29jpCheckBoxes.add(jchkCentered);

30jpCheckBoxes.add(jchkBold);

31jpCheckBoxes.add(jchkItalic);

32add(jpCheckBoxes, BorderLayout.EAST);

34// Register listeners with the check boxes

35jchkCentered.addActionListener(new ActionListener() {

36public void actionPerformed(ActionEvent e) {

37messagePanel.setCentered(jchkCentered.isSelected());

38}

39});

40jchkBold.addActionListener(new ActionListener() {

JFrame

ButtonDemo

CheckBoxDemo

create frame

create UI

register listener

register listener

580 Chapter 17

Creating Graphical User Interfaces

 

41

 

 

public void actionPerformed(ActionEvent e) {

 

42

 

 

setNewFont();

 

43

}

 

 

 

44

});

 

 

 

45

 

 

jchkItalic.addActionListener(new ActionListener() {

 

 

46

 

 

public void actionPerformed(ActionEvent e) {

 

47

 

 

setNewFont();

 

48

}

 

 

 

49

});

 

 

 

50

}

 

 

 

 

51

 

 

 

 

 

set a new font

52

 

private void setNewFont() {

 

 

 

53

 

 

// Determine a font style

 

54

 

 

int fontStyle = Font.PLAIN;

 

55

 

 

fontStyle += (jchkBold.isSelected() ? Font.BOLD : Font.PLAIN);

 

56

 

fontStyle += (jchkItalic.isSelected() ? Font.ITALIC : Font.PLAIN);

 

57

 

 

 

 

 

 

58

 

 

// Set font for the message

 

59

 

 

Font font = messagePanel.getFont();

 

60

 

 

messagePanel.setFont(

 

61

 

 

new Font(font.getName(), fontStyle, font.getSize()));

 

62

}

 

 

 

 

63

}

 

 

 

 

CheckBoxDemo extends ButtonDemo and adds three check boxes to control how the message is displayed. When a CheckBoxDemo is constructed (line 12), its superclass’s no-arg constructor is invoked, so you don’t have to rewrite the code that is already in the constructor of ButtonDemo.

When a check box is checked or unchecked, the listener’s actionPerformed method is invoked to process the event. When the Centered check box is checked or unchecked, the centered property of the MessagePanel class is set to true or false.

The current font name and size used in MessagePanel are obtained from messagePanel.getFont() using the getName() and getSize() methods. The font styles (Font.BOLD and Font.ITALIC) are specified in the check boxes. If no font style is selected, the font style is Font.PLAIN. Font styles are combined by adding together the selected integers representing the fonts.

The keyboard mnemonics C, B, and I are set on the check boxes Centered, Bold, and Italic, respectively (lines 22–24). You can use a mouse click or a shortcut key to select a check box.

The setFont method (line 60) defined in the Component class is inherited in the MessagePanel class. This method automatically invokes the repaint method. Invoking setFont in messagePanel automatically repaints the message.

A check box fires an ActionEvent and an ItemEvent when it is clicked. You could process either the ActionEvent or the ItemEvent to redisplay the message. The example processes the ActionEvent. If you wish to process the ItemEvent, create a listener for ItemEvent and register it with a check box. The listener must implement the itemStateChanged handler to process an ItemEvent. For example, the following code registers an ItemListener with jchkCentered:

// To listen for ItemEvent jchkCentered.addItemListener(new ItemListener() {

/** Handle ItemEvent */

public void itemStateChanged(ItemEvent e) { messagePanel.setCentered(jchkCentered.isSelected());

}

});

17.4 Radio Buttons 581

17.4 Radio Buttons

Radio buttons, also known as option buttons, enable you to choose a single item from a group of choices. In appearance radio buttons resemble check boxes, but check boxes display a square that is either checked or blank, whereas radio buttons display a circle that is either filled (if selected) or blank (if not selected).

JRadioButton inherits AbstractButton and provides several constructors to create radio buttons, as shown in Figure 17.13. These constructors are similar to the constructors for

JCheckBox.

Video Note

Use radio buttons

javax.swing.AbstractButton

 

 

 

 

 

 

 

 

javax.swing.JToggleButton

 

 

 

 

 

 

 

 

javax.swing.JRadioButton

 

 

 

 

 

+JRadioButton()

 

Creates a default radio button with no text and icon.

+JRadioButton(text: String)

 

Creates a radio button with text.

+JRadioButton(text: String, selected:

 

Creates a radio button with text and specifies whether the radio button is

boolean)

 

initially selected.

+JRadioButton(icon: Icon)

 

Creates a radio button with an icon.

+JRadioButton(text: String, icon: Icon)

 

Creates a radio button with text and an icon.

+JRadioButton(text: String, icon: Icon,

 

Creates a radio button with text and an icon, and specifies whether the

selected: boolean)

 

radio button is initially selected.

+addActionEvent(listener:

 

Adds an ActionListener for this object.

ActionListener): void

 

 

+addItemListener(listener: ItemListener)

 

Adds an ItemListener for this object.

: void

 

 

 

 

 

FIGURE 17.13 JRadioButton defines a radio button.

Here is an example of a radio button with text Student, red foreground, white background, mnemonic key S, and initially selected.

JRadioButton jrb = new JRadioButton("Student", true); jrb.setForeground(Color.RED); jrb.setBackground(Color.WHITE);

jrb.setMnemonic('S');

To group radio buttons, you need to create an instance of java.swing.ButtonGroup and use the add method to add them to it, as follows:

ButtonGroup group = new ButtonGroup(); group.add(jrb1);

group.add(jrb2);

This code creates a radio-button group for radio buttons jrb1 and jrb2 so that they are selected mutually exclusively. Without grouping, jrb1 and jrb2 would be independent.

582 Chapter 17

Creating Graphical User Interfaces

 

Note

GUI helper class

ButtonGroup is not a subclass of java.awt.Component, so a ButtonGroup object can-

 

not be added to a container.

 

When a radio button is changed (selected or deselected), it fires an ItemEvent and then an

 

ActionEvent. To see if a radio button is selected, use the isSelected() method.

 

Listing 17.4 gives a program that adds three radio buttons named Red, Green, and Blue

 

to the preceding example to let the user choose the color of the message, as shown in

 

Figure 17.14.

JPanel with GridLayout for three

radio buttons

FIGURE 17.14 Three radio buttons are added to specify the color of the message.

Again there are at least two approaches to writing this program. The first is to revise the preceding CheckBoxDemo class to insert the code for adding the radio buttons and processing their events. The second is to create a subclass that extends CheckBoxDemo. Listing 17.4 gives the code to implement the second approach.

LISTING 17.4 RadioButtonDemo.java

 

1

import java.awt.*;

 

JFrame

 

2

import java.awt.event.*;

 

 

 

3

import javax.swing.*;

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ButtonDemo

 

5

public class

RadioButtonDemo extends CheckBoxDemo

{

 

 

 

6

 

// Declare radio buttons

 

 

 

7

 

private JRadioButton jrbRed, jrbGreen, jrbBlue;

 

 

 

 

 

 

 

CheckBoxDemo

 

8

 

public static void main(String[] args) {

 

 

 

9

 

 

 

create frame

10

 

RadioButtonDemo frame = new RadioButtonDemo();

 

 

RadioButtonDemo

 

11

 

frame.setSize(500, 200);

 

 

 

12

 

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

 

13

 

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

14

 

frame.setTitle("RadioButtonDemo");

 

 

 

15

 

frame.setVisible(true);

 

 

 

16

}

 

 

 

 

 

 

 

17

 

 

 

 

 

 

 

 

create UI

18

 

public RadioButtonDemo() {

 

 

 

19

 

// Create a new panel to hold check boxes

 

 

 

20

 

JPanel jpRadioButtons = new JPanel();

 

 

 

21

 

jpRadioButtons.setLayout(new GridLayout(3, 1));

 

 

 

22

 

jpRadioButtons.add(jrbRed

= new JRadioButton("Red")

);

 

23

 

jpRadioButtons.add(jrbGreen = new JRadioButton("Green"));

 

24

 

jpRadioButtons.add(jrbBlue = new JRadioButton("Blue"));

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