java gui programming. - university of waterloocs349/w16/slides/2.1-java-part1.pdf · (examples)...
TRANSCRIPT
Java GUI Programming.
A quick-start guide to building Swing applications. With examples and pictures.
CS 349 Winter 2016
1
Introduction
BackgroundDesign goals
2
Bac
kgro
und • Designed by James Gosling
• Released by Sun Microsystems in 1995.– Originally a proprietary license, but made open
source under GNU GPL in 2007.– Sun and Java acquired by Oracle in 2010.
• General-purpose, portable language.– Cross-platform, and able to scale from small
devices to large applications.• Broadly adopted, and extremely successful.
– “Java is TIOBE's Programming Language of 2015!” (www.tiobe.com)
3
4
Des
ign
Goa
ls Five primary design goals:1. It must be "simple, object-oriented, and
familiar".2. It must be "robust and secure".3. It must be "architecture-neutral and
portable".4. It must execute with "high performance".5. It must be "interpreted, threaded, and
dynamic".
- Gosling, “The Java Language Environment”
5
Obj
ect O
rient
ed • C++ syntax– Meant to be familiar to legions of C++
developers that would migrate to Java.• Class-based, object-oriented design.
– Explicitly object-oriented– Cannot build procedural applications!
• Extensive class libraries included– Cross-platform!– Support for everything from threading to
database access to building user interfaces.– This makes Java unique; many languages rely
on third-party libraries.
6
Java
Virt
ual M
achi
ne (J
VM) • Portability is achieved through virtualization
– Java compiles to bytecode (IR).
– Bytecode is executed by a Java virtual machine (JVM) on the target platform.
– Interpreted bytecode is slower than native code BUT just-in-time compilation can give near-native performance.
http://viralpatel.net/blogs/java-virtual-machine-an-inside-story/
7
Java Platform
InstallationParts of the platformBuilding and deploying applications
8
Inst
allin
g th
e Pl
atfo
rm • There are two main Java implementations– Oracle Java: https://docs.oracle.com/javase/8/– Open JDK: FOSS implementation for Linux.
• JRE: standalone JVM installation (runtime).• JDK: JRE plus development tools and libraries.
– This gives you command-line tools (javaccompiler and java runtime).
• Third-party support is excellent– Editor support in VIM, Sublime, etc.– IDEs like IntelliJ, Eclipse.
9
Java
Pla
tform
(JD
K) • Includes tools, and libraries - everything from
threading, to database access, to UI toolkits – all cross platform and portable.
10
Bui
ldin
g A
pplic
atio
ns • Source code is first written in plain text files ending with the .java extension (one class per source file).
• Source files are then compiled into .class files (bytecode) by the javac compiler.
11
Dep
loym
ent • Class files (.class) can be executed on any
platform with an appropriate JVM.• Often applications include many class files,
which we bundle into a JAR (.jar) file (basically a zip file with metadata).
12
Com
man
d-Li
ne T
ools To compile on the command line:
$ javac CountArgsApp.java
To run compiled app:$ java CountArgsApp one two three
You provided 3 args.
13
The Java Programming Language
Language featuresClasses and objectsLibrariesProgram structure
14
Stan
dard
Lan
guag
e Fe
atur
es • Java uses the same syntax as C++ in most situations, so the style will be familiar. – Variables
• Standard naming conventions apply– Operators
• Equality: == !=• Assignment: = += -= and so on.• Logical: not (!) and (&&) or (||) ternary(? :)
– Structure• { } to nest blocks of code• Control flow: if… else, while, break/continue.
15
Java
Sim
ple
Type
s: s
ee C
++ Type Size Format Rangeboolean ≤1 byte — false, true
byte 1 byte signed integer ±127
short 2 bytes signed integer ±32,767
char 2 bytes unsigned integer 0 to +65,535
int 4 bytes signed integer ±2,147,483,647
long 8 bytes signed integer … Umm, really big
float 4 bytes floating point ±1038
double 8 bytes floating point ±10308
16
Primitive types also have corresponding Object types (e.g. Boolean class for booleans, Integer for integers and so on.)
Obj
ect-O
rient
ed P
rogr
amm
ing • Java is class-based and object-oriented
– Difficult to fall back to procedural programming; language is not well-designed for that.
• Class: type• Object: instance of that type
– Create a new object with the new keyword.– Objects contain both data (fields) and behavior
(methods).
17
Inst
antia
ting
an O
bjec
t
No explicit destructor!Do we need one?18
Bicycle.java
ß Create an instance
Inst
antia
ting
Obj
ects • In Java,
– Primitive types are allocated on the stack, passed by value.
– Objects are allocated on the heap, passed by reference• Technically, value of address passed on the
stack, but behaves like pass-by-reference.
Both refer to the same memory on the heap
• Practically, this means that you don’t need to worry about pointer semantics in parameter passing.
19
Con
side
r Cla
ss B
icyc
le
20
ß Instantiated on the heap
Poin
ter G
otch
as! • Arrays are objects, so:
21
• First line allocates an array on the heap with space for 10 Bicycle pointers (40 bytes), but all Bicycle pointers are still null
• for loop allocates space for Bicycle to each entry in bikeStore array
Poin
ter G
otch
as • Note the followingint[] myInts = new int[10];myInts[0]=15;
• Error or no?– Why?
22
Gar
bage
Col
lect
ion
(GC
) • In Java, there’s no need to free memory– Garbage collection runs periodically and frees
up memory that’s not in use.– JVM attempts to do this without impacting
performance.
http://www.ibm.com/developerworks/library/j-jtp10283/23
Stru
ctur
e of
a P
rogr
am
• Static method that instantiates the parent class.
24
Bicycle.java
Java
OO
Fea
ture
s Familiar OO features still apply to Java:
Feature Description
Classes, objects Types, instances of those types
Dynamic dispatch Objects determine type at runtime, instead of being static typed.
Encapsulation Data hiding
Composition Nesting objects
Inheritance Hierarchy of is-a class relationships
Polymorphism Calling code is agnostic in terms of whether an object is a derives or base class.
25
Java
Cla
ss S
truc
ture
VariablesClass variables Shared among all
objects.static
Instance variables Belong to an object instance.
Member variables All variables belonging to an object.
MethodsClass methods Shared among all
objects.static
Instance methods Belong to an object instance.
26
Nes
ted
Cla
sses Classes can be nested as inner classes. Watch scope!
x = 23this.x = 1
ShadowTest.this.x = 027
Inhe
ritan
ce • Inheritance: increasing code reusability by allowing a class to inherit some of it’s behavior from a base class (“is a” relationship).– Classes inherit common attributes and
behavior from base classes. – e.g. “Mountain Bike” is-a “Bike”.
• Common: speed, gear• Unique: engine
– Use extends keyword.
Bike
Mountain Bike
28
Subt
ype
Poly
mor
phis
m
” Meow! ““ Woof! “
Animals1.java
The Animalclass is abstract,
and cannot be instantiated.
It’s talk() method is abstract, so
derived classes must override it.
29
Sing
le In
herit
ance • Java only supports single inheritance!
• In practice, this simplifies the language.• See the “Diamond
Problem” for one example of multiple inheritance being a hard problem.
• Solutions to this problem vary by language; Java just doesn’t let you do it.
• It’s very common to derive an existing Java Platform class and override behavior.
• All classes have Object as their ultimate base class (implicit).
30
Inte
rfac
es • An interface represents a set of methods that must be implemented by a class (“contract”).
• Similar to pure abstract classes/methods.– Can’t be instantiated– Class implementing the interface must
implement all methods in the interface.– Use implements keyword.
• In Java, – extend a class to derive functionality from it– implement an interface when you want to
enforce a specific API.31
Inte
rfac
es E
xam
ple • We can replace the abstract class/method with
an interface.– Polymorphism still applies to interfaces.
Animals2.java
Note that we’re treating the
interface, Pet, as a type32
Inte
rfac
es E
xam
ple
interface Driveable {public void accelerate();public void brake();public int getSpeed();
}
// implement interface onlyclass Car implements Driveable {}class Train implements Driveable {}
// derive from base class, and implement interfaceclass Motorcycle extends Bike implements Driveable {}
• You can (and will often) mix approaches.– e.g. Drivable interface could be applied to any type
of drivable vehicle, including our Bike class hierarchy.
33
Exte
nded
Exa
mpl
e Bikes1.java – classesBikes2.java - interfaces
34
Java Class Libraries
PackagesJFrameSwing
35
Java
Pla
tform
(JD
K) • The Java Platform includes extensive cross-
platform libraries to do everything from threading to database queries to user-interfaces.
36
Java
Cla
ss L
ibra
ry • Classes are grouped into packages (namespaces, to avoid collision).
• Use the import keyword to import the package– This is how you include bundled Java libraries.
• To assign your source code to a package, use the package keyword at the top of source files.
• Typically, package = subdirectory– e.g. “graphics” package is in subdirectory of
the same name– alt. it can be included in a JAR file.
• For simplicity, samples and assignments won’t normally do this.
37
Com
mon
Cla
sses
/Pac
kage
s Package Classes (Examples)
Description
java.awt Color, Graphics, Graphics2D, event.
Contains all of the classes for creating user interfaces and for painting graphics and images.
javax.swing JFrame, JButton, JList, JToolbar
Provides a set of "lightweight" (all-Java language) components that works the same on all platforms.
java.io File, FileReader, FileWriter, InputStream
Provides for system input and output through data streams, serialization and the file system.
java.lang Boolean, Integer, String, System, Thread, Math
Provides classes that are fundamental to the design of the Java programming language.
java.util ArrayList, HashMap, Observable
Contains the collections framework, legacy collection classes, event model,…
Java 8 API Specification: https://docs.oracle.com/javase/8/docs/api/overview-summary.html38
Java
Cla
ss H
iera
rchy • Implicit class hierarchy
– All classes in Java are derived from the Object class in java.lang defines and implements common class behavior • e.g. clone(), toString(), finalize() methods
– Classes you write inherit this basic behavior.
39
Wha
t’s n
ext? • Java Part 2
– Java components– Using listeners and adapters to handle events– Drawing components
• Events– Event dispatch
40
Res
ourc
es • Java 8: http://www.oracle.com/technetwork/java/javase/
• Java 8 SE Platform Reference: https://docs.oracle.com/javase/8/docs/api/overview-summary.html
• Java 8 Tutorials: http://docs.oracle.com/javase/tutorial/java/index.html
• Java Language Whitepaper: http://www.stroustrup.com/1995_Java_whitepaper.pdf
• Jetbrains Student Licenses (IntelliJ): https://www.jetbrains.com/student/
41