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

Slides:



Advertisements
Similar presentations
Chapter 19 – Graphical User Interfaces
Advertisements

Graphical User Interfaces (Part IV)
Graphical User Interfaces, 2D Graphics & Game Programming.
Multithreading : animation. slide 5.2 Animation Animation shows different objects moving or changing as time progresses. Thread programming is useful.
Java Swing Recitation – 11/(20,21)/2008 CS 180 Department of Computer Science, Purdue University.
Chapter Eighteen: Graphical User Interfaces. Chapter Goals To understand the use of layout managers to arrange user- interface components in a container.
Chapter 6 Graphical User Interface (GUI) and Object-Oriented Design (OOD)
Inheritance Review CSC 171 FALL 2004 LECTURE 19. READING Read Horstmann, Chapter 11 Look at Chapter 12 – Will not be on MT or Final – One lab Begin Reading.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 14 GUI and Event-Driven Programming.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 14 GUI and Event-Driven Programming.
Carnegie Mellon University, MISM1 Java GUI programming and Java Threads GUI example taken from “Computing Concepts with Java 2” by Cay Horstmann Thread.
Object Oriented Programming Java 1 GUI example taken from “Computing Concepts with Java 2” by Cay Horstmann GUI Programming.
Chapter 13: Advanced GUIs and Graphics J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition.
Scott Grissom, copyright 2006Ch 11: GUI Slide 1 Graphical User Interfaces (Ch 11) Careful design of a graphical user interface is key to a viable software.
Unit 11 Object-oriented programming: Graphical user interface Jin Sa.
CPSC150 Week 12 Graphical User Interfaces Chapter 11.
Chapter 13 Advanced GUIs and Graphics. Chapter Objectives Learn about applets Explore the class Graphics Learn about the class Font Explore the class.
Combo Box, Check Boxes, and Radio Buttons. Radio Buttons User can click radio buttons, just like other buttons BUT Radio buttons are mutually exclusive.
Using Inheritance to Customize Frames Use inheritance for complex frames to make programs easier to understand Design a subclass of JFrame Store the components.
Java Programming: From Problem Analysis to Program Design, 4e Chapter 12 Advanced GUIs and Graphics.
Object-Oriented Programming (Java), Unit 19 Kirk Scott 1.
Liang, Introduction to Java Programming, Fifth Edition, (c) 2005 Pearson Education, Inc. All rights reserved Chapter 13 Creating User.
Layout Management Containers can arrange their components. Our container is a JPanel, and it can set the way it’s components will be laid out : mypanel.setLayout.
Introduction to GUI in Java 1. Graphical User Interface Java is equipped with many powerful,easy to use GUI component such as input and output dialog.
Adding Graphics to a Frame Application Applets: Can generate drawings by overriding paint Frame: Do not draw directly on a frame. Draw graphics on a JPanel.
Chapter 12 Event Handling. Chapter Goals To understand the Java event model To install action and mouse event listeners To accept input from buttons,
GUI Components and Design Here we add one more component to our programs, JButtons –JButtons can only be inserted into JPanels (or JApplets) –Clicking.
Chapter 14 Graphical User Interfaces. Chapter Goals To use inheritance to customize frames To understand how user-interface components are added to a.
Chapter 17 – Graphical User Interfaces Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved.
MT311 Java Application Development and Programming Languages Li Tak Sing ( 李德成 )
Fall 2006Adapded from Java Concepts Companion Slides1 Event Handling Advanced Programming ICOM 4015 Lecture 13 Reading: Java Concepts Chapter 12.
SWING. AbstractButton Swing Buttons are subclasses of the AbstractButton class, which extends JComponent. Abstract class javax.swing.AbstractButton AbstractButton.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
Graphical User Interface. Chapter Goals To understand the use of layout managers to arrange user- interface components in a container To become familiar.
Fall 2006Adapted from Java Concepts Companion Slides1 Graphical User Interfaces Advanced Programming ICOM 4015 Lecture 12 Reading: Java Concepts Chapter.
Chapter 14 Graphical User Interfaces. Chapter Goals To use inheritance to customize frames To understand how user-interface components are added to a.
Chapter 12: Graphical User Interfaces 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 1 Chapter 12 Graphical User Interfaces JAVA.
Copyright © 2002, Systems and Computer Engineering, Carleton University c-Gui3.ppt * Object-Oriented Software Development Part 18-c Building.
MT311 Java Application Development and Programming Languages Li Tak Sing ( 李德成 )
GUI Programming using NetBeans. RHS – SOC 2 GUI construction We have previously talked about elements in a (simple) GUI –Frames, Panes and Dialogs –Text.
CSE 501N Fall ‘09 18: Java GUI (Swing) 10 November 2009 Nick Leidenfrost.
Copyright © 2013 by John Wiley & Sons. All rights reserved. ADVANCED USER INTERFACES CHAPTER Slides by Donald W. Smith TechNeTrain.com Final Draft 10/30/2011.
1 / 67 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 14 Programming Fundamentals using Java 1.
©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e Chapter 10: Event Handling 1 Event Handling.
Introduction to Java Chapter 9 - Graphical User Interfaces and Applets1 Chapter 9 Graphical User Interfaces and Applets.
CHAPTER 10 EVENT HANDLING. CHAPTER GOALS To understand the Java event model To install mouse and action listeners To accept mouse and text input To display.
©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e Chapter 10: Event Handling 1 Chapter 10 Event Handling.
More GUI Components We finish off our examination of GUI components today by looking at a few that we haven’t seen yet –we start off with the JSlider the.
Basics of GUI Programming Chapter 11 and Chapter 22.
Creating a Window. A basic window in Java is represented by an object of the class Window in the package java.awt.
GUI Components CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L.
Chapter 14 Graphical User Interfaces. Chapter Goals To understand how to create frames To use inheritance to customize frames To understand how user-interface.
Java Programming Week 5: Graphical User Interfaces (Chapter 18)
GUI Tutorial 2. What did we do last time?  Basic flow  instance variables, set up in ctor, close operation, size, visible  JFrame  Event-driven programming.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter Chapter 7-3 ( Book Chapter 14) GUI and Event-Driven Programming.
KeyListener and Keyboard Events Just as we can implement listeners to handle mouse events, we can do the same for keyboard events (keypresses) –to implement.
Chapter 10 - Writing Graphical User Interfaces1 Chapter 10 Writing Graphical User Interfaces.
Swing GUI Components So far, we have written GUI applications which can ‘ draw ’. These applications are simple, yet typical of all Java GUI applications.
Event Handler Methods Text field Object Responder JAVA AWT Environment: Messages are sent between JAVA Objects Screen Event Notification Press Button.
CHAPTER 12 GRAPHICAL USER INTERFACES. CHAPTER GOALS To use inheritance to customize panels and frames To understand how user interface components are.
Introduction to GUI in 1 Graphical User Interface 3 Nouf Almunyif.
Introduction to GUI Programming in Java: Frames, Simple Components, and Layouts.
GUI.1 Graphical User Interfaces GUIs. GUI.2 The Plan Components Flat Layouts Hierarchical Layouts Designing a GUI Coding a GUI.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter Chapter 7 ( Book Chapter 14) GUI and Event-Driven Programming.
Christopher Budo, Davis Nygren, spencer franks, Luke miller
Chapter 13: Advanced GUIs and Graphics
Chapter 14 Graphical User Interfaces
Graphical User Interface
Advanced GUIs and Graphics
Graphical User Interface
Presentation transcript:

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

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 2 Chapter 12: Graphical User Interfaces 2 Figure 1 A Program with Four Buttons

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 3 Chapter 12: Graphical User Interfaces 3 Use Panels to Organize Buttons JPanel buttonPanel = new JPanel(); buttonPanel.add(upButton); buttonPanel.add(downButton);... contentPane.add(buttonPanel, "South");

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 4 Chapter 12: Graphical User Interfaces 4 Figure 2 Containers with Separate Layout Managers

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 5 Chapter 12: Graphical User Interfaces 5 Layout Managers BorderLayout (center, south, north, east, west) FlowLayout (left-to-right) GridLayout (rectangular grid) Default: Content pane has border layout Default: Panels have flow layout Change default: panel.setLayout(new GridLayout(4, 3));

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 6 Chapter 12: Graphical User Interfaces 6 Figure 3 The Border Layout Grows Components

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 7 Chapter 12: Graphical User Interfaces 7 FlowLayout doesn't grow content The border layout and grid layout grow buttons etc. to fit the entire area of the border or grid Remedy: put button(s) inside panel with flow layout

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 8 Chapter 12: Graphical User Interfaces 8 Figure 4 Grid Layout

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 9 Chapter 12: Graphical User Interfaces 9 Grid Layout Add buttons left-to-right/top-to-bottom panel.add(button7); panel.add(button8); panel.add(button9); panel.add(button4);... panel.add(buttonCE);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 10 Chapter 12: Graphical User Interfaces 10 Figure 5 Buttons with Labels and Icons

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 11 Chapter 12: Graphical User Interfaces 11 Buttons Specify label and optional icon in constructor JButton leftButton = new JButton("left"); leftButton = new JButton("left", new ImageIcon("left.gif")); Add action listener to handle “button click” event

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 12 Chapter 12: Graphical User Interfaces 12 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();

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 13 Chapter 12: Graphical User Interfaces 13 } 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 14 Chapter 12: Graphical User Interfaces 14 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 15 Chapter 12: Graphical User Interfaces 15 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();

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 16 Chapter 12: Graphical User Interfaces 16 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); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 17 Chapter 12: Graphical User Interfaces 17 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); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 18 Chapter 12: Graphical User Interfaces 18 /** Moves the rectangle and repaints it. The rectangle is moved by multiples of its full width or dx the number of width 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; }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 19 Chapter 12: Graphical User Interfaces 19 Figure 6 A Frame with a Text Area and a Text Field

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 20 Chapter 12: Graphical User Interfaces 20 Text Components Specify number of rows/characters in constructor: tf = new TextField(5); ta = new TextArea(10, 40); Turn edit mode off if you want to display text ta.setEditable(false); Set text programmatically tf.setText("Hello");

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 21 Chapter 12: Graphical User Interfaces 21 Labels Use a label to tag a text field JLabel label = new JLabel("Name", SwingConstants.RIGHT); Add label to panel: panel.add(label); panel.add(nameField);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 22 Chapter 12: Graphical User Interfaces 22 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();

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 23 Chapter 12: Graphical User Interfaces 23 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 24 Chapter 12: Graphical User Interfaces 24 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

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 25 Chapter 12: Graphical User Interfaces 25 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 input the string containing the 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 26 Chapter 12: Graphical User Interfaces 26 } /** Computes the average of an array of floating-point data the numbers to 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 27 Chapter 12: Graphical User Interfaces 27 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); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 28 Chapter 12: Graphical User Interfaces 28 Figure 7 A Combo Box, Radio Buttons, and Check Boxes

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 29 Chapter 12: Graphical User Interfaces 29 Radio Buttons Radio buttons are mutually exclusive Button group turns one button off when the next one is turned on sButton = new JRadioButton("Small"); mButton = new JRadioButton("Medium"); lButton = new JRadioButton("Large"); buttonGroup.add(sbutton); buttonGroup.add(mbutton); buttonGroup.add(lbutton) Still need to add to panel

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 30 Chapter 12: Graphical User Interfaces 30 Check Boxes Similar to radio button, not mutually exclusive JCheckBox it = new JCheckBox("Italic"); Test if selected if (it.isSelected())...

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 31 Chapter 12: Graphical User Interfaces 31 Borders Use border to group related components Add border to panel holding components panel.setBorder(new TitledBorder(new EtchedBorder(), "Title"));

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 32 Chapter 12: Graphical User Interfaces 32 Figure 8 An Opened Combo Box

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 33 Chapter 12: Graphical User Interfaces 33 Combo boxes Use less space than radio buttons Users can type other values “Combo” between list selection and text field JComboBox faceName = new JComboBox(); faceName.addItem("Serif"); faceName.addItem("SansSerif");... Get user selection sel= (String)faceName.getSelectedItem();

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 34 Chapter 12: Graphical User Interfaces 34 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 35 Chapter 12: Graphical User Interfaces 35 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

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 36 Chapter 12: Graphical User Interfaces 36 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 37 Chapter 12: Graphical User Interfaces 37 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 38 Chapter 12: Graphical User Interfaces 38 // 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

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 39 Chapter 12: Graphical User Interfaces 39 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. */

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 40 Chapter 12: Graphical User Interfaces 40 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 41 Chapter 12: Graphical User Interfaces 41 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(); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 42 Chapter 12: Graphical User Interfaces 42 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); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 43 Chapter 12: Graphical User Interfaces 43 Figure 9 Pulldown Menus

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 44 Chapter 12: Graphical User Interfaces 44 Menus Add menu bar to frame JMenuBar bar = new JMenuBar(); frame.setJMenuBar(bar); Add menus to the menu bar JMenu fileMenu = new JMenu("File"); bar.add(fileMenu);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 45 Chapter 12: Graphical User Interfaces 45 Menu items Add menu items to the menu JMenuItem fileNew = new JMenuItem("New"); Add action listener to the menu item ActionListener l =...; fileNew.addActionListener(l);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 46 Chapter 12: Graphical User Interfaces 46 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 47 Chapter 12: Graphical User Interfaces 47 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

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 48 Chapter 12: Graphical User Interfaces 48 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 49 Chapter 12: Graphical User Interfaces 49 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 50 Chapter 12: Graphical User Interfaces 50 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 51 Chapter 12: Graphical User Interfaces 51 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);

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 52 Chapter 12: Graphical User Interfaces 52 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); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 53 Chapter 12: Graphical User Interfaces 53 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(); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 54 Chapter 12: Graphical User Interfaces 54 /** Moves the rectangle to a random position. */ public void randomize() { Random generator = new Random(); rect.setLocation(generator.nextInt(getWidth()), generator.nextInt(getHeight())); repaint(); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 55 Chapter 12: Graphical User Interfaces 55 /** Moves the rectangle and repaints it. The rectangle is moved by multiples of its full width or dx the number of width 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; }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 56 Chapter 12: Graphical User Interfaces 56 Figure 10 A Color Mixer

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 57 Chapter 12: Graphical User Interfaces 57 Figure 11 A Demonstration Application from the Java Development Kit

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 58 Chapter 12: Graphical User Interfaces 58 Exploring the Documentation Don't try to understand all methods Focus on what you need to do your job –How do I construct a slider? –How can I get notified when the user has moved it? –How can I tell what the user has set it to? When you complete the basics, look again –How about those “tick marks”?

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 59 Chapter 12: Graphical User Interfaces 59 Figure 12 A Mysterious Entry in the JSlider Documentation

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 60 Chapter 12: Graphical User Interfaces 60 How to construct a slider JSlider() Has range (0,100) JSlider(int min, int max, int value) Can specify range and initial value JSlider(BoundedRangeModel m) appears to be some internal mechanism

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 61 Chapter 12: Graphical User Interfaces 61 How to get notifications Look for “addXxxListener”: void addChangeListener(ChangeListener l) What is a change listener? It has a single method void stateChanged(ChangeEvent e) Plan: Add a change listener, read slider state and update color in that method

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 62 Chapter 12: Graphical User Interfaces 62 How to get slider setting Look at all methods that start with “get”: int getValue() R eturns the slider's value

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 63 Chapter 12: Graphical User Interfaces 63 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 64 Chapter 12: Graphical User Interfaces 64 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();

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 65 Chapter 12: Graphical User Interfaces 65 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));

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 66 Chapter 12: Graphical User Interfaces 66 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. */

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 67 Chapter 12: Graphical User Interfaces 67 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;

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 68 Chapter 12: Graphical User Interfaces 68 private class ColorListener implements ChangeListener { public void stateChanged(ChangeEvent event) { setSampleColor(); } private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); }

©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e 69 Chapter 12: Graphical User Interfaces 69 Figure 13 Visual Programming Environment