Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials,...

63
©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12: Graphical User Interfaces 1 Chapter 12 Graphical User Interfaces JAVA

Transcript of Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials,...

Page 1: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

1

Chapter 12: Graphical User Interfaces1

Chapter 12

Graphical User Interfaces

JAVA

Page 2: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

2

Chapter 12: Graphical User Interfaces2

Structure

• Predefined structure– Jbutton– Jpanel– Jframe– contentPane– Container

Page 3: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

3

Chapter 12: Graphical User Interfaces3

Figure 1A Program withFour Buttons

contentPane with border layout

Panel with flow layout

Page 4: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

4

Chapter 12: Graphical User Interfaces4

Layout Management

• JAVA Swing• Add buttons

– contentPane.add(upButton, “South”);

– contentPane.add(downbutton, “South”); //error• Jpanel buttonPanel = new Jpanel();

• buttonPanel.add(upButton);

• buttonPanel.add(downButton);

• buttonPanel.add(leftButton);

• buttonPanel.add(rigtButton);

• contentPane.add(buttonPanel, “South”);

Page 5: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

5

Chapter 12: Graphical User Interfaces5

Layout Management

• Border layout• Flow layout• Grid layout• Build up user interfaces by adding components

into containers.• The content pane is a container (Jpanel)• Content pane (default: border layout)• Panel (default: flow layout)

Page 6: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

6

Chapter 12: Graphical User Interfaces6

Layout Management

• Border layout: grows each component to fill all available space in its area.

• The flow layout leaves each component at its preferred size.

• The grid layout arranges components in a grid with a fixed number of rows and columns, resizing each of the component.

Page 7: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

7

Chapter 12: Graphical User Interfaces7

Border Layout Panel

• Jpanel panel = new Jpanel();

• panel.setLayout(new BorderLayout());

Page 8: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

8

Chapter 12: Graphical User Interfaces8

Figure 2Containers withSeparate LayoutManagers

Page 9: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

9

Chapter 12: Graphical User Interfaces9

Figure 3The Border Layout GrowsComponents

Page 10: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

10

Chapter 12: Graphical User Interfaces10

Grid Layout

• Jpanel numberPanel = new Jpanel();

• numberPanel.setLayout(new GridLayout(4,3));

• numberPanel.add(button7);

• numberPanel.add(button8);

• numberPanel.add(button9);

• numberPanel.add(button4);

• …

Page 11: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

11

Chapter 12: Graphical User Interfaces11

Figure 4Grid Layout

Page 12: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

12

Chapter 12: Graphical User Interfaces12

Buttons

• When a button is clicked, it sends an action event.

• You need an action listener. • leftButton = new JButton(“Left”);

• leftButton = new JButton(new ImageIcon(“left.gif”));

• leftButton = new(“Left, new ImageIcon(“left.gif”));

Page 13: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

13

Chapter 12: Graphical User Interfaces13

Figure 5Buttons with Labels andIcons

Page 14: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

14

Chapter 12: Graphical User Interfaces14

Listener

• Individual listener• upButton =new Jbutton(“UP”);

• ActionListener listener = new UpListener();

• upButton.addActionListener(listener);

• Jbutton upButton; private class UpListener implements …

• Unified listener– actionPerformed method

– getSource method of the ActionEvent parameter

Page 15: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

15

Chapter 12: Graphical User Interfaces15

Program ButtonTest.java

import java.awt.Container;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;

public class ButtonTest{ public static void main(String[] args) { ButtonFrame frame = new ButtonFrame(); frame.setTitle("ButtonTest"); frame.show();

Page 16: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

16

Chapter 12: Graphical User Interfaces16

}}

class ButtonFrame extends JFrame{ public ButtonFrame() { final int DEFAULT_FRAME_WIDTH = 300; final int DEFAULT_FRAME_HEIGHT = 300; setSize(DEFAULT_FRAME_WIDTH,DEFAULT_FRAME_HEIGHT);

addWindowListener(new WindowCloser());

// construct components

panel = new RectanglePanel(); JPanel buttonPanel = new JPanel();

ActionListener listener = new DirectionListener();

upButton = new JButton("Up"); upButton.addActionListener(listener);

Page 17: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

17

Chapter 12: Graphical User Interfaces17

downButton = new JButton("Down");downButton.addActionListener(listener);

leftButton = new JButton("Left");leftButton.addActionListener(listener);

rightButton = new JButton("Right");rightButton.addActionListener(listener);

// add components to content pane

Container contentPane = getContentPane();contentPane.add(panel, "Center");

buttonPanel.add(upButton);buttonPanel.add(downButton);buttonPanel.add(leftButton);buttonPanel.add(rightButton);

Page 18: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

18

Chapter 12: Graphical User Interfaces18

contentPane.add(buttonPanel, "South");}

private RectanglePanel panel;private JButton upButton;private JButton downButton;private JButton leftButton;private JButton rightButton;

// inner class definition

private class DirectionListener implements ActionListener{ public void actionPerformed(ActionEvent event) { // find the button that was clicked

Object source = event.getSource();

Page 19: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

19

Chapter 12: Graphical User Interfaces19

if (source == upButton) panel.moveRectangle(0, -1); else if (source == downButton) panel.moveRectangle(0, 1); else if (source == leftButton) panel.moveRectangle(-1, 0); else if (source == rightButton) panel.moveRectangle(1, 0); } }

private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } }}

Page 20: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

20

Chapter 12: Graphical User Interfaces20

class RectanglePanel extends JPanel{ public RectanglePanel() { rect = new Rectangle(0, 0, RECT_WIDTH, RECT_HEIGHT);}

public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.draw(rect);}

Page 21: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

21

Chapter 12: Graphical User Interfaces21

/** Moves the rectangle and repaints it. The rectangle is moved by multiples of its full width or height. @param dx the number of width units @param dy the number of height units */ public void moveRectangle(int dx, int dy) { rect.translate(dx * RECT_WIDTH, dy * RECT_HEIGHT); repaint(); }

private Rectangle rect; private static final int RECT_WIDTH = 20; private static final int RECT_HEIGHT = 30;}

Page 22: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

22

Chapter 12: Graphical User Interfaces22

Common Errors of the Button

• Do not identify components by their label text.

• Forgetting to attach a listener.

Page 23: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

23

Chapter 12: Graphical User Interfaces23

Text Components

• JTextArea class• Both JTextField and JTextArea are

subclasses of the JTextComponent class.• Number of characters

– JTextFiled interestRateField = new JTextField(5);

• Rows and columns– JTextArea resultArea = new JTextArea(10, 40)

Page 24: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

24

Chapter 12: Graphical User Interfaces24

Text Components

• setEditalbe – JTextField result = new JTextField();– result.setEditable(false);

• setFont method

Page 25: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

25

Chapter 12: Graphical User Interfaces25

Figure 6A Frame with a Text Areaand a Text Field

Page 26: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

26

Chapter 12: Graphical User Interfaces26

Program TextTest.java

import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.StringTokenizer;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;

public class TextTest{ public static void main(String[] args) { TextFrame frame = new TextFrame();

Page 27: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

27

Chapter 12: Graphical User Interfaces27

frame.setTitle("TextTest"); frame.show(); }}

class TextFrame extends JFrame{ public TextFrame() { final int DEFAULT_FRAME_WIDTH = 300; final int DEFAULT_FRAME_HEIGHT = 300; setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT); addWindowListener(new WindowCloser());

// construct components

inputArea = new JTextArea();

resultField = new JTextField(20);resultField.setEditable(false);

Page 28: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

28

Chapter 12: Graphical User Interfaces28

calcButton = new JButton("Calculate");calcButton.addActionListener(new ButtonListener());

// add components to content pane

Container contentPane = getContentPane();contentPane.add(inputArea, "Center");

// arrange the label and text field in a panel

JPanel resultPanel = new JPanel();resultPanel.add(new JLabel("Average:"));resultPanel.add(resultField);

// place the button in a panel

JPanel buttonPanel = new JPanel();buttonPanel.add(calcButton);

// stack up these two panels in another panel

Page 29: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

29

Chapter 12: Graphical User Interfaces29

JPanel southPanel = new JPanel(); southPanel.setLayout(new GridLayout(2, 1)); southPanel.add(resultPanel); southPanel.add(buttonPanel);

contentPane.add(southPanel, "South");}

/** Reads numbers from a string that contains a sequence of floating-point numbers separated by white space. @param input the string containing the numbers @return the numbers that were found in the string*/public static double[] getData(String input){ StringTokenizer tokenizer = new StringTokenizer(input); double[] data = new double[tokenizer.countTokens()]; for (int i = 0; i < data.length; i++) data[i] = Double.parseDouble(tokenizer.nextToken()); return data;

Page 30: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

30

Chapter 12: Graphical User Interfaces30

}

/** Computes the average of an array of floating-point numbers. @param data the numbers to average @return the average, or 0 if the array was empty*/

public static double average(double[] data){ if (data.length == 0) return 0; double sum = 0; for (int i = 0; i < data.length; i++) sum = sum + data[i]; return sum / data.length;}

private JTextArea inputArea;private JTextField resultField;private JButton calcButton;

Page 31: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

31

Chapter 12: Graphical User Interfaces31

private class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { // get user input from text area

double[] data = getData(inputArea.getText());

// compute average and display in result field

double avg = average(data); resultField.setText("” + avg); } }

private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } }}

Page 32: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

32

Chapter 12: Graphical User Interfaces32

Choices

• Radio Buttons (mutually exclusive)

• Check boxes (not mutually exclusive)

• Combo Boxes

Page 33: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

33

Chapter 12: Graphical User Interfaces33

Figure 7A Combo Box, RadioButtons, and CheckBoxes

Page 34: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

34

Chapter 12: Graphical User Interfaces34

Figure 8An Opened Combo Box

Page 35: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

35

Chapter 12: Graphical User Interfaces35

Program ChoiceTest.java

import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.JTextField;import javax.swing.border.EtchedBorder;import javax.swing.border.TitledBorder;

Page 36: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

36

Chapter 12: Graphical User Interfaces36

public class ChoiceTest{ public static void main(String[] args) { ChoiceFrame frame = new ChoiceFrame(); frame.setTitle("ChoiceTest"); frame.show(); }}

class ChoiceFrame extends JFrame{ public ChoiceFrame() { final int DEFAULT_FRAME_WIDTH = 300; final int DEFAULT_FRAME_HEIGHT = 300; setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);

addWindowListener(new WindowCloser());

// construct components

Page 37: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

37

Chapter 12: Graphical User Interfaces37

sampleField = new JTextField ("Computing Concepts with Java Essentials");sampleField.setEditable(false);

ChoiceListener listener = new ChoiceListener();

facenameCombo = new JComboBox();facenameCombo.addItem("Serif");facenameCombo.addItem("SansSerif");facenameCombo.addItem("Monospaced");facenameCombo.setEditable(true);facenameCombo.addActionListener(listener);

italicCheckBox = new JCheckBox("Italic");italicCheckBox.addActionListener(listener);

boldCheckBox = new JCheckBox("Bold");boldCheckBox.addActionListener(listener);

Page 38: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

38

Chapter 12: Graphical User Interfaces38

smallButton = new JRadioButton("Small");smallButton.setSelected(true);smallButton.addActionListener(listener);

mediumButton = new JRadioButton("Medium");mediumButton.addActionListener(listener);

largeButton = new JRadioButton("Large");largeButton.addActionListener(listener);

// add radio buttons to button group

ButtonGroup sizeGroup = new ButtonGroup();sizeGroup.add(smallButton);sizeGroup.add(mediumButton);sizeGroup.add(largeButton);

Page 39: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

39

Chapter 12: Graphical User Interfaces39

// add components to panels

JPanel facenamePanel = new JPanel();facenamePanel.add(facenameCombo);

JPanel sizeGroupPanel = new JPanel();sizeGroupPanel.add(smallButton);sizeGroupPanel.add(mediumButton);sizeGroupPanel.add(largeButton);sizeGroupPanel.setBorder (new TitledBorder(new EtchedBorder(), "Size"));

JPanel styleGroupPanel = new JPanel();styleGroupPanel.add(italicCheckBox);styleGroupPanel.add(boldCheckBox);styleGroupPanel.setBorder (new TitledBorder(new EtchedBorder(), "Style"));

// line up component panels

Page 40: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

40

Chapter 12: Graphical User Interfaces40

JPanel southPanel = new JPanel(); southPanel.setLayout(new GridLayout(3, 1)); southPanel.add(facenamePanel); southPanel.add(sizeGroupPanel); southPanel.add(styleGroupPanel);

// add panels to content pane

Container contentPane = getContentPane(); contentPane.add(sampleField, "Center"); contentPane.add(southPanel, "South");

setSampleFont();}/** Gets user choice for font name, style, and size and sets the font of the text field.*/

Page 41: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

41

Chapter 12: Graphical User Interfaces41

public void setSampleFont(){ // get font name

String facename = (String)facenameCombo.getSelectedItem();

// get font style

int style = 0; if (italicCheckBox.isSelected()) style = style + Font.ITALIC; if (boldCheckBox.isSelected()) style = style + Font.BOLD;

// get font size

final int SMALL_SIZE = 12; final int MEDIUM_SIZE = 16; final int LARGE_SIZE = 24;

Page 42: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

42

Chapter 12: Graphical User Interfaces42

int size = 0; if (smallButton.isSelected()) size = SMALL_SIZE; else if (mediumButton.isSelected()) size = MEDIUM_SIZE; else if (largeButton.isSelected()) size = LARGE_SIZE;

// set font of text field

sampleField.setFont(new Font(facename, style, size)); sampleField.repaint();}

Page 43: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

43

Chapter 12: Graphical User Interfaces43

private JTextField sampleField; private JCheckBox italicCheckBox; private JCheckBox boldCheckBox; private JRadioButton smallButton; private JRadioButton mediumButton; private JRadioButton largeButton; private JComboBox facenameCombo;

private class ChoiceListener implements ActionListener { public void actionPerformed(ActionEvent event) { setSampleFont(); } }

private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } }}

Page 44: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

44

Chapter 12: Graphical User Interfaces44

Menus

• Add a listener to each menu item.

Page 45: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

45

Chapter 12: Graphical User Interfaces45

Figure 9Pulldown Menus

Page 46: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

46

Chapter 12: Graphical User Interfaces46

Program MenuTest.java

import java.awt.Container;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.Random;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;

Page 47: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

47

Chapter 12: Graphical User Interfaces47

public class MenuTest{ public static void main(String[] args) { MenuFrame frame = new MenuFrame(); frame.setTitle("MenuTest"); frame.show(); }}

class MenuFrame extends JFrame{ public MenuFrame() { final int DEFAULT_FRAME_WIDTH = 300; final int DEFAULT_FRAME_HEIGHT = 300; setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);

addWindowListener(new WindowCloser());

// add drawing panel to content pane

Page 48: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

48

Chapter 12: Graphical User Interfaces48

panel = new RectanglePanel();Container contentPane = getContentPane();contentPane.add(panel, "Center");

// construct menu

JMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);

JMenu fileMenu = new JMenu("File");menuBar.add(fileMenu);

MenuListener listener = new MenuListener();

newMenuItem = new JMenuItem("New");fileMenu.add(newMenuItem);newMenuItem.addActionListener(listener);

Page 49: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

49

Chapter 12: Graphical User Interfaces49

exitMenuItem = new JMenuItem("Exit");fileMenu.add(exitMenuItem);exitMenuItem.addActionListener(listener);

JMenu editMenu = new JMenu("Edit");menuBar.add(editMenu);

JMenuItem moveMenu = new JMenu("Move");editMenu.add(moveMenu);

upMenuItem = new JMenuItem("Up");moveMenu.add(upMenuItem);upMenuItem.addActionListener(listener);

downMenuItem = new JMenuItem("Down");moveMenu.add(downMenuItem);downMenuItem.addActionListener(listener);

Page 50: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

50

Chapter 12: Graphical User Interfaces50

leftMenuItem = new JMenuItem("Left"); moveMenu.add(leftMenuItem); leftMenuItem.addActionListener(listener);

rightMenuItem = new JMenuItem("Right"); moveMenu.add(rightMenuItem); rightMenuItem.addActionListener(listener);

randomizeMenuItem = new JMenuItem("Randomize"); editMenu.add(randomizeMenuItem); randomizeMenuItem.addActionListener(listener);}

private JMenuItem exitMenuItem;private JMenuItem newMenuItem;private JMenuItem upMenuItem;private JMenuItem downMenuItem;private JMenuItem leftMenuItem;private JMenuItem rightMenuItem;

Page 51: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

51

Chapter 12: Graphical User Interfaces51

private JMenuItem randomizeMenuItem;private RectanglePanel panel;

private class MenuListener implements ActionListener{ public void actionPerformed(ActionEvent event) { // find the menu that was selected

Object source = event.getSource();

if (source == exitMenuItem) System.exit(0); else if (source == newMenuItem) panel.reset(); else if (source == upMenuItem) panel.moveRectangle(0, -1); else if (source == downMenuItem) panel.moveRectangle(0, 1); else if (source == leftMenuItem) panel.moveRectangle(-1, 0);

Page 52: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

52

Chapter 12: Graphical User Interfaces52

else if (source == rightMenuItem) panel.moveRectangle(1, 0); else if (source == randomizeMenuItem) panel.randomize(); } }

private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } }}

class RectanglePanel extends JPanel{ public RectanglePanel() { rect = new Rectangle(0, 0, RECT_WIDTH, RECT_HEIGHT); }

Page 53: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

53

Chapter 12: Graphical User Interfaces53

public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.draw(rect);}

/** Resets the rectangle to the top left corner.*/public void reset(){ rect.setLocation(0, 0); repaint();}

Page 54: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

54

Chapter 12: Graphical User Interfaces54

/** Moves the rectangle to a random position.*/public void randomize(){ Random generator = new Random(); rect.setLocation(generator.nextInt(getWidth()), generator.nextInt(getHeight())); repaint();}

Page 55: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

55

Chapter 12: Graphical User Interfaces55

/** Moves the rectangle and repaints it. The rectangle is moved by multiples of its full width or height. @param dx the number of width units @param dy the number of height units */ public void moveRectangle(int dx, int dy) { rect.translate(dx * RECT_WIDTH, dy * RECT_HEIGHT); repaint(); }

private Rectangle rect; private static int RECT_WIDTH = 20; private static int RECT_HEIGHT = 30;}

Page 56: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

56

Chapter 12: Graphical User Interfaces56

Figure 10A Color Mixer

Page 57: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

57

Chapter 12: Graphical User Interfaces57

Program SliderTest.java

import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JSlider;import javax.swing.SwingConstants;import javax.swing.event.ChangeListener;import javax.swing.event.ChangeEvent;

Page 58: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

58

Chapter 12: Graphical User Interfaces58

public class SliderTest{ public static void main(String[] args) { SliderFrame frame = new SliderFrame(); frame.setTitle("SliderTest"); frame.show(); }}

class SliderFrame extends JFrame{ public SliderFrame() { final int DEFAULT_FRAME_WIDTH = 300; final int DEFAULT_FRAME_HEIGHT = 300; setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);

addWindowListener(new WindowCloser());

// construct components

colorPanel = new JPanel();

Page 59: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

59

Chapter 12: Graphical User Interfaces59

ColorListener listener = new ColorListener();

redSlider = new JSlider(0, 100, 100);redSlider.addChangeListener(listener);

greenSlider = new JSlider(0, 100, 70);greenSlider.addChangeListener(listener);

blueSlider = new JSlider(0, 100, 70);blueSlider.addChangeListener(listener);

// fill content pane

JPanel southPanel = new JPanel();southPanel.setLayout(new GridLayout(3, 2));southPanel.add(new JLabel("Red", SwingConstants.RIGHT));

Page 60: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

60

Chapter 12: Graphical User Interfaces60

southPanel.add(redSlider); southPanel.add(new JLabel("Green", SwingConstants.RIGHT)); southPanel.add(greenSlider); southPanel.add(new JLabel("Blue", SwingConstants.RIGHT)); southPanel.add(blueSlider);

Container contentPane = getContentPane(); contentPane.add(colorPanel, "Center"); contentPane.add(southPanel, "South");

setSampleColor();}

/** Reads the slider values and sets the panel to the selected color.*/

Page 61: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

61

Chapter 12: Graphical User Interfaces61

public void setSampleColor(){ // read slider values

float red = 0.01F * redSlider.getValue(); float green = 0.01F * greenSlider.getValue(); float blue = 0.01F * blueSlider.getValue();

// set panel background to selected color

colorPanel.setBackground(new Color(red, green, blue)); colorPanel.repaint();}

private JPanel colorPanel;private JSlider redSlider;private JSlider greenSlider;private JSlider blueSlider;

Page 62: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

62

Chapter 12: Graphical User Interfaces62

private class ColorListener implements ChangeListener { public void stateChanged(ChangeEvent event) { setSampleColor(); } }

private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } }}

Page 63: Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.

©2000, John Wiley & Sons, Inc.Horstmann/Java Essentials, 2/e

63

Chapter 12: Graphical User Interfaces63

Homework

• P12.3

• Calculator with + - * / operations

• Use grid layout and text.