GUI programming Graphical user interface-based programming Chapter G1 (pages 289-314) 1

Download Report

Transcript GUI programming Graphical user interface-based programming Chapter G1 (pages 289-314) 1

GUI programming
Graphical user interface-based programming
Chapter G1 (pages 289-314)
1
Windchill
 Windchill
 There are several formulas for
calculating the windchill temperature twc
 The one provided by U.S. National
Weather Service and is applicable for a windspeed greater
than four miles per hour
twc  0.081(t  91.4)(3.71 v  5.81  0.25v)  91.4
 Where
 Variable t is the Fahrenheit temperature
 Variable v is the windspeed in miles per hour
2
Console-based programming
Console program
Method main() {
statement 1;
statement 2;
...
statement m;
}
Console programs
begin and end in
method main()
3
In use
Program needs to respond whenever the run button is clicked
There
needs to
be an
event loop
that is
looking for
user
inteface
events
4
GUI-based programming
GUI program begins in method main().
On completion, the event dispatching loop is begun
GUI Program
main() {
GUI gui = new GUI();
}
GUI Constructor() {
constructor1;
constructor2;
...
constructorn;
}
Action Performer() {
action1;
action2;
...
actionk;
}
Event-dispatching loop
Constructor configures
the components of the GUI
do
if an event occurs
then signal its
action listeners
until program ends
The event-dispatching loop watches
for user interactions with the GUI
The action performer implements the task of the GUI. 5
An old prediction of the future…
7
Java support
 JFrame
 Represents a titled, bordered window
 JLabel
 Represents a display area suitable for one or both of a
single-line text or image.
 JTextField
 Represents an editable single-line text entry component
 JButton
 Represents a push button
 JTextArea
 Represents an editable multiline text entry component8
Instance variables
 private JFrame window
 References the window containing the other components
of the GUI
9
Instance variables
 private JTextArea legendArea
 References the text display for the multiline program
legend
10
Instance variables
 private JLabel fahrTag
 References the label for the data entry area supplying the
temperature
11
Instance variables
 private JTextField fahrText
 References the data area supplying the temperature
12
Instance variables
 private JLabel windTag
 References the label for the data entry area supplying the
windspeed
13
Instance variables
 private JTextField windText
 References the data area supplying the windspeed
14
Instance variables
 private JLabel chillTag
 References the label for the data area giving the windchill
15
Instance variables
 private JTextField chillText
 References the data area giving the windchill
16
Instance variables
 private JButton runButton
 References the “Run” button
17
Class constants
 private static final String LEGEND = "This windchill calculator"
+ "is intended for velocities greater than 4 mph.“
 Program legend text
18
Class constants
 private static final int WINDOW_WIDTH = 350
 Initial width of the GUI
19
Class constants
 private static final int WINDOW_HEIGHT = 185
 Initial height of the GUI
20
Class constants
 private static final int AREA_WIDTH = 40
 Width of the program legend in characters
21
Class constants
 private static final int FIELD_WIDTH = 40
 Number of characters per data entry area
22
Class constants
 private static final FlowLayout LAYOUT_STYLE =
new FlowLaout()
 References manager that lays out GUI components in a
top-to-bottom, left-to-right manner
23
Class constants
 Our GUI without a layout manager
24
Class constants
 Increased window width changes the layout
25
Program Windchill.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Windchill implements ActionListener {
// class constants
// instance variables with initialization
// Windchill(): default constructor
// actionPerformed(): run button action event handler
// main(): application entry point
}
26
How much will Christmas cost?


http://www.pncbank.com/12days
Flash animation (local)
27
Program Windchill.java – class constants
private static final int WINDOW_WIDTH = 350;
// pixels
private static final int WINDOW_HEIGHT = 185;
// pixels
private static final int FIELD_WIDTH = 20;
// characters
private static final int AREA_WIDTH = 40;
// characters
private static final FlowLayout LAYOUT_STYLE =
new FlowLayout();
private static final String LEGEND = "This windchill "
+ "calculator is intended for velocities greater than 4 mph.";
28
Program Windchill.java – instance variables
// window for GUI
private JFrame window =
new JFrame("Windchill Calculator");
// legend
private JTextArea legendArea = new JTextArea(LEGEND, 2,
AREA_WIDTH);
// user entry area for temperature
private JLabel fahrTag = new JLabel("Fahrenheit temperature");
private JTextField fahrText = new JTextField(FIELD_WIDTH);
29
Program Windchill.java – instance variables
// user entry area for windspeed
private JLabel windTag = new JLabel("
Windspeed (mph)");
private JTextField windText = new JTextField(FIELD_WIDTH);
// entry area for windchill result
private JLabel chillTag =
new JLabel(" Windchill temperature");
private JTextField chillText = new JTextField(FIELD_WIDTH);
// run button
private JButton runButton = new JButton("Run");
30
Program Windchill.java – constructor
public Windchill() {
// configure GUI
// register event listener
// add components to container
// display GUI
}
31
Program Windchill.java – constructor
public Windchill() {
// configure GUI
window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
legendArea.setEditable(false);
...
32
Bad line wrapping
It is important to
make program
legends
uneditable
33
Program Windchill.java – constructor
public Windchill() {
// configure GUI
window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
legendArea.setEditable(false);
legendArea.setLineWrap(true);
legendArea.setWrapStyleWord(true);
...
34
Dangers of an editable legend
Line wrapping in
the middle of a
word
35
Program Windchill.java – constructor
public Windchill() {
// configure GUI
window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
legendArea.setEditable(false);
legendArea.setLineWrap(true);
legendArea.setWrapStyleWord(true);
legendArea.setBackground(window.getBackground());
chillText.setEditable(false);
chillText.setBackground(Color.WHITE);
36
Bad line wrapping
A JLabel is
noneditable
by the user
By default the text field
of a JTextField is
editable by the user
37
Program Windchill.java – constructor
public Windchill() {
// configure GUI …
// register event listener
runButton.addActionListener(this);
38
Run button action-event handling
An ActionListener has an
actionPerformer() method that
handles the class-specific activity
Action events are
sent to registered
action listeners
GUI : Action Listener
actionPerformer() Method
Action
Event
When the run button is
clicked, it dispatches an
action event

Get data entries from temperature
and windspeed data areas

Compute windchill according to the
Weather Service formula

Display result to windchill data
area
39
Program Windchill.java – constructor
public Windchill() {
// configure GUI …
// register event listener …
// add components to container
Container c = window.getContentPane();
c.setLayout(LAYOUT_STYLE);
c.add(legendArea);
c.add(fahrTag);
c.add(fahrText);
c.add(windTag);
c.add(windText);
c.add(chillTag);
c.add(chillText);
c.add(runButton);
40
Program Windchill.java – constructor
public Windchill() {
// configure GUI …
// register event listener …
// add components to container …
// make GUI visible
window.setVisible(true);
41
Laying out the GUI components
Top to
bottom,
left to right
42
Program Windchill.java – action performer
public void actionPerformed(ActionEvent e) {
// get user’s responses
// compute windchill
// display windchill
}
44
Program Windchill.java – action performer
public void actionPerformed(ActionEvent e) {
// get user’s responses
String response1 = fahrText.getText();
double t = Double.parseDouble(response1);
String response2 = windText.getText();
double v = Double.parseDouble(response2);
// compute windchill
// display windchill
}
45
Program Windchill.java – action performer
46
Program Windchill.java – action performer
public void actionPerformed(ActionEvent e) {
// get user’s responses
String response1 = fahrText.getText();
double t = Double.parseDouble(response1);
String response2 = windText.getText();
double v = Double.parseDouble(response2);
// compute windchill
double windchillTemperature = 0.081 * (t - 91.4)
* (3.71*Math.sqrt(v) + 5.81 - 0.25*v) + 91.4;
int perceivedTemperature =
(int) Math.round(windchillTemperature);
// display windchill
}
47
Today’s demotivators
48
Program Windchill.java – action performer
public void actionPerformed(ActionEvent e) {
// get user’s responses
String response1 = fahrText.getText();
double t = Double.parseDouble(response1);
String response2 = windText.getText();
double v = Double.parseDouble(response2);
// compute windchill
double windchillTemperature = 0.081 * (t - 91.4)
* (3.71*Math.sqrt(v) + 5.81 - 0.25*v) + 91.4;
int perceivedTemperature =
(int) Math.round(windchillTemperature);
// display windchill
String output = String.valueOf(perceivedTemperature);
49
chillText.setText(output);
}
Program Windchill.java – action performer
50
Method main()
public static void main(String[] args) {
Windchill gui = new Windchill();
}
51
Another method main()
public static void main(String[] args) {
Windchill gui1 = new Windchill();
Windchill gui2 = new Windchill();
}
52
Text version of WindChill.java
public class WindChill {
public static void main (String args[]) {
Scanner stdin = new Scanner(System.in);
System.out.println ("Enter temperature in fahrenheit degrees");
double t = stdin.nextDouble();
System.out.println ("Enter wind speed in miles per hour");
double v = stdin.nextDouble();
double windtemp = 0.081 * (t - 91.4) * (3.71*Math.sqrt(v) + 5.81
- 0.25*v) + 91.4;
System.out.println ("The windchill temperature is " +
windtemp);
}
}
 Obviously should include legend, comments, etc.
54
Applets
 Java program run within a browser
 Implies an applet is run from a web page
 Applets may not access or modify the file system running the
applet
 A modern applet has JApplet as its superclass
 JApplet is part of the swing package
 An applet does use JFrame
 A JApplet has a content pane
55
Applets
 Important inherited methods
 init()
 Run when browser loads applet
 start()
 Run by browser to start applet execution
 stop()
 Run by browser to stop its execution
 destroy()
 Run by browser immediately before it its ended
 paint(Graphics g)
 Run by browser to refresh its GUI
 By default the inherited methods do nothing
56
A simple applet
import java.awt.*;
import javax.swing.*;
public class DisplayQuote extends JApplet {
public void paint(Graphics g) {
g.drawString("Anyone who spends their life on a "
+ " computer is pretty unusual.", 20, 30);
g.drawString("Bill Gates, Chairman of Microsoft",
25, 45);
}
}
57
Web page – quote.htm
<html>
<title> Windchill </title>
<applet code="DisplayQuote.class" width=400 height=300>
</applet>
</html>
58