CS4273: Distributed System Technologies and Programming I

advertisement
CS4273: Distributed System Technologies and Programming I
Lecture 2: Introduction to Java and GUI
Important References for Java Manuals
• Web site for Java Swing (GUI)
http://download.oracle.com/javase/tutorial/uiswing/
• Web site for Java Swing Event handler
http://download.oracle.com/javase/tutorial/uiswing/events/index.html
• Web site for Java 2 Standard Edition
http://www.oracle.com/technetwork/java/javase/overview/index.html
• Sample Programs
Source codes of demo programs are in unix system: ~jia/www/java/
2
Java: an Object-Oriented Programming Language
Object-Oriented Programming:
• Encapsulation
• Inheritance
• Polymorphism
3
Class and Method Definition
•
class consists of fields and methods:
class class-name [extends superclass]
[implements interface] {
variable declarations;
method declarations;
}
•
method declaration:
[modifiers] returnT method (args) {
statements;
}
public class dummyButton extends JApplet {
String font;
int style, size;
private JButton bold, italic;
public void init() {
bold = new JButton("BOLD");
add(bold);
add(italic = new JButton("ITALIC"));
font = "Helvetica";
style = Font.PLAIN;
size = 48;
}
public void paint(Graphics g) {
super.paint(g);
g.setFont(new Font(font, style, size));
g.drawString("Hello Java!", 50, 100);
}
class butnhandler implements ActionListener {
public void actionPerformed (ActionEvent e) {
………}
4
Object Initialization and Constructor
•
•
All variables must be initialized before use. Java automatically sets some
initial values for variables of the class, but not variables in methods.
A constructor is a special method, with the same name as the class, for
initialization. Java provides an empty & no-argument constructor if a class
does not have one.
class Rabbit {
int Age;
Rabbit (int Age) { //constructor
this.Age = Age; }//differentiate from the Age in the parameter
void run(int duration,boolean zigzag){ ... }
}
class RabbitGame {
public static void main(string[] args) {
Rabbit bunny = new Rabbit(3);
….
}
5
Class Inheritance and Method Overriding
•
•
•
When a method has the same
name as in the superclass, the
method overrides the one in
superclass. Otherwise the
superclass methods are
inherited with no change.
The top class in Java is
“object”. Every class is a
descendent of object
(implicitly inherited).
Keyword super refers to the
superclass’ methods or
variables.
class Animals {
int Age;
Animals (int Age) { this.Age = Age; }
void wish ()
{ System.out.println ("I want to eat"); }
}
class Rabbit extends Animals {
.. .. ..
Rabbit (int Age, char Color) {
super (Age);
// call super constructor
this.Color = Color;
}
void wish () {
// method over-ride
super.wish();
// call a super method
System.out.println("I want a carrot"); }
}
Rabbit my_rabbit = new Rabbit(3, ‘B’);
my_rabbit.wish();
// ? output ?
6
Modifier: static
•
•
•
A variable or method defined as class Rabbit {
static means that the variable
static int rabbits_count = 0;
or the method belongs to the
int Age;
class, and they are not with
Rabbit (int Age) {
objects.
rabbits_count++; // access static var
Static variables / methods are
this.Age = Age;
class variables / methods. There
}
is only one copy of them in the
static int count() {// only use class variable
system.
return rabbits_count;
Class methods can only access
}
class variables. It cannot use
}
“this” reference, cannot call
Object Template
normal methods, etc. But
static vars,
…
normal methods can access
class variables.
object
object
7
Modifiers: public, private, protected, final
•
•
•
•
public: can be used everywhere.
private: can be used only in its own class, not even from its subclass.
protected: can be accessed within its own package.
final defines:
– a class can’t be extended
– a method can’t be overridden
– a variable cannot be modified (constant)
final class Rabbit extends Animal {
final float  = 3.14;
….
final int run(int duration, boolean zigzag) { …. } // method 1
}
8
Abstract Methods and Abstract Classes
•
•
•
An abstract method is a method that has no implementation. It allows
subclasses to implement the method according to their own needs.
An abstract class is a class that contains at least one abstract method.
An abstract class must be FULLY implemented before it can be
instantiated.
abstract class Animals {
int Age;
Animals (int Age) { this.Age = Age; }
abstract void wish ();
}
class Rabbit extends Animals {
.. .. ..
void wish () {
// implement the abstract method
System.out.println("I want a carrot"); }
}
9
Interface and its Implementation
•
•
•
An interface is a class that all its methods are abstract.
There are many interfaces in Java, especially for event handlers, that
require implementations.
When defining a class which implements an interface, uses the format:
class xxx implements interface {
method declaration;
…….
method declaration;
}
•
If a class implements some methods of an interface, not all of them,
then this class becomes an abstract class.
10
Graphical User Interface (GUI)
Containers and Components
• Containers provide a rectangular display area in which
components are positioned. A container can also contain
other containers.
• Components are positioned relative to the top left corner
(0,0) of its container and are located using the container’s
coordinate space.
• Components are added to a container using the add()
method.
11
Containers/Components
Containers:
JFrame, equivalent to windows.
JPanel, applet’s display area is JPanel. It is often used to organize
components together in display.
Atomic Components:
JButtons (JCheckBoxes, JRadioButtons)
JComboBox
JLabels
JTextField (JTextArea)
Popup menus
ScrollPane
12
A Simple Example of Buttons
public class dummyButton extends JApplet {
public void init() {
setLayout(new FlowLayout(FlowLayout.CENTER));
bold = new JButton("bold");
add(bold);
add(italic = new JButton("italic"));
}
public void paint(Graphics g) {
super.paint(g);
g.setFont(new Font(MyFont, MyStyle, MySize));
g.drawString("Hello Java!", 50, 100);
}
………..
13
Java Event Handling Model
• When user clicks a button or presses a key, an
event is generated. The button clicked is called
“event source”.
• For each event source, you need to delegate a
Listener object to listen to it.
• When the listener object hears an event, it
invokes a method to process the event.
button
Listener
Object
Event
bold = new JButton(“bold”);
bold.addActionListener(new BtnHandler());
public class BtnHandler implements ActionListener
{ …….
public void actionPerformed (ActionEvent e)
{
// code to handler start button }
}
14
Make Buttons Responsive
The steps making buttons responsive:
1. write an event handler which
implements interface
ActionListener. Interface
ActionListener has only one
method actionPerformed.
2. implement method
actionPerformed in the interface.
3. add action listener (your event
handler) to each event source.
public class dummyButton extends JApplet {
public void init() {
add(bold = new Button("bold"));
bold.addActionListener (new butnhandler());
…. }
class butnhandler implements ActionListener {
public void actionPerformed (ActionEvent e) {
if (e.getSource() == bold)
style = Font.BOLD;
if (e.getSource() == italic)
style = Font.ITALIC;
repaint();
}
}
}
15
TextField
Textfiled is used for getting Text Input from users.
• TextField is constructed as:
JTextField tf = new JTextField(“input here”, 20);
add(tf);
• an “action” event is generated when the user types “return” in a
TextField. You need to add an event-handler to the JTextField object by:
tf.addActionListener (new actionAdapter());
• get the input text by:
String InputStr = tf.getText();
• set the text field (for display) by:
tf.setText(“wrong input”);
16
TextArea
TextArea is used to display or edit a number of rows and cols.
There is no event handler associated with it. It can be used
with ScrollPane to make it scrollable.
• TextArea can be constructed by:
JTextArea ta = new JTextArea(row, col);
• display text in a TextArea by:
ta.setText(String str); OR
ta.append(String str);
• get the whole text in TextArea by:
ta.getText();
17
Event handling for TextField
JTextField event is “action” type:
class TextHandler implements ActionListener {
// jia/www/java/gui/textField.java
public void actionPerformed (ActionEvent e){
public class textFieldTest extends JApplet {
if (e.getSource() == textin) {
JTextField textin, textout;
textArea.setText(textin.getText());
JTextArea textArea;
textout.setText(textin.getText());
public void init() {
}
}}}
setLayout(new FlowLayout());
add(textin = new JTextField("",20));
textin.addActionListener (
new TextHandler ());
textArea = new JTextArea(10,20);
add(textArea);
add(textout = new JTextField("initial",20));
}
18
GUI Event Handlings
•
Action Events. Event sources:
– JButton, List,
– JTextField,
– JMenuItem, etc.
•
Item Events. Event sources:
–
–
–
–
•
JCheckbox,
JButtonGroup (RadioButton),
JComboBox
JChoice (Pop-up menu)
Mouse Events.
– Mouse press / release
– Mouse drag / move
•
Key Events
– Key press / release
– Key typed
…………
19
CheckBox, ButtonGroup (RadioButton)
Checkbox allows users to tick (true / false). A checkbox can be used independently.
• a Checkbox is created by:
new JCheckbox();
ButtonGroup is a group of checkboxes, only one of them can be selected.
• a ButtonGroup is created by:
g = new ButtonGroup();
• a RadioButton is created & added to Group by:
btn = new JRadioButton();
g.add(btn);
// add btn to group g
•
•
•
When a checkbox is clicked, an event of type ItemEvent is generated. A handler for
ItemEvent type of events implements the interface ItemListener.
Interface ItemListener has only one method itemStateChanged(). You need to
implement it.
For each checkbox, an event handler (an object of type addItemListener) should
be added to it.
20
Choice and Event Handler
•
•
Choice is a drop-down menu of choices, created by
c = Choice().
A choice item is added in by:
c.addItem(“item”);
•
An “item” event is generated when an item of the Choice is selected
and you can get the item by:
String e.getItem();
•
•
// c is a choice
// e is the event
Choice event handler is the same as CheckBox, which implements
interface ItemListener. ItemListener has a method
itemStateChanged (ItemEvent e).
An event handler object must be added to a Choice (the entire dropdown menu) by:
addItemListener()
21
Mouse Event and Handler
•
•
•
•
Two interfaces, MouseListener and MouseMotionListener,
are for mouse events. Two adapters MouseAdapter and
MouseMotionAdapter are provided for the interfaces. You
may either implement the interfaces or extend the adapters.
Mouse events include click, press, release, move, drag
(press-move), etc.
You need to implement all the methods in interfaces or
redefine (override) the necessary methods in adapters.
Add an Adapter object to the window in which you want to
catch mouse events.
22
Event Listener Interface and Adapter
•
•
For easy programming, some listener interfaces have
Adapter classes, which have default implementations of
all methods in the respective interfaces.
If the Adapter of a listener interface is provided, you don’t
have to implement the whole interface. You only need to
override some methods necessary to perform your work.
23
Example of Mouse Event Handler
//file:mouseDrawAline.java
import java.awt.event.*;
public class mouseDrawAline extends JApplet {
Point start = new Point(0,0), end = new Point(10,10);
public void init() {
addMouseListener(new myMouseAdapter());
addMouseMotionListener(
new myMouseMotionAdapter());
}
public void paint(Graphics g) {
super.paint(g); // clear existing paintings
g.drawLine(start.x, start.y, end.x, end.y);
}
class myMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
start.x = e.getX(); start.y = e.getY();
}
public void mouseReleased(MouseEvent e) {
end.x = e.getX(); end.y = e.getY();
repaint(); }
}
class myMouseMotionAdapter extends
MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
end.x = e.getX(); end.y = e.getY();
repaint();
}
}
24
Keyboard Event
• The interface for keyboard event handler is KeyListener.
• KeyListener has an adapter KeyAdapter. A keyevent handler class can
either implement KeyListener interface, or extend KeyAdapter class.
• Three methods defined in KeyListener:
– keyPressed (keyEvent), called when any key is pressed
– keyTyped (keyEvent), called only when a non-function key is pressed
– keyReleased (keyEvent), called when a key is released after keyPressed
or keyTyped event.
• Three methods on keyEvent allows you to get keycode:
– event.getKeyCode()
– event.getKeyChar(), get printable letter of the key
– event.getKeyText(keyCode), get string name of the key
25
Keyboard Event
public class keyTest extends JApplet {
public void init() {
setLayout (new BorderLayout ());
JTextArea textArea = new JTextArea( 30, 30 );
add("Center", textArea);
textArea.addKeyListener(new
myKeyAdapter());
}
class myKeyAdapter extends KeyAdapter {
public void keyPressed( KeyEvent event ) {
int keycode = event.getKeyCode();
String line = "Key pressed code: "+keycode;
line = line+ " & Text: "+
event.getKeyText(keycode);
textArea.setText(line+"\n");
}
public void keyTyped( KeyEvent event ){
textArea.append("Key typed: "+
event.getKeyChar()+"\n");
}
public void keyReleased(KeyEvent event ) {
textArea.append("Key released: "+
event.getKeyChar());
}
26
Event Processing Model in Java:
Event Types and Adapters
Java.lang.object
Java.awt.event.ComponenetAdapter
Java.awt.event.KeyAdapter
Java.awt.event.MouseAdapter
Java.awt.event.MouseMotionAdapter
Java.awt.event.WindowAdapter
Java.awt.event.ContainerAdapter
……………..
27
Event Dispatching
•
•
•
Each component in a container is an object that has two methods,
dispathEvent() and processEvent().
When an event is generated by an external device (mouse, kbd, etc), the outmost container’s dispatchEvent() is invoked, which dispatches the event
recursively layer by layer to the right component (i.e., event source).
When a component finds itself is the source of the event, it calls
processEvent(e) to process the event.
// dispatch an event to the right component
void dispatchEvent(AWTEvent e) {
……
if (newEventsOnly) {
if (eventEnabled(e)) {
processEvent(e);
}
…….
}
28
Process Event
Method processEvent() of the component is the
root of all of the event-type processing functions.
case MouseEvent.MOUSE_EIXTED:
processMouseEvent((MouseEvent)e);
break;
case MouseEvent.MOUSE_MOVED:
case MouseEvent.MOUSE_DRAGGED:
protected void processEvent(AWTEvent e) {
if (e instanceof FocusEvent) {
processFocusEvent((FocusEvent) e);
} elseif (e instanceof MouseEvent) {
switch(e.getId()) {
processMouseMotionEvent((Mouse
Event)e);
break; }
} else if (e instanceof KeyEvent) {
processKeyEvent((KeyEvent)e);
} elseif (e instanceof ComponentEvent) {
case MouseEvent.MOUSE_PRESSED:
case MouseEvent.MOUSE_RELEASED:
case MouseEvent.MOUSE_CLICKED:
case MouseEvent.MOUSE_ENTERED:
processComponentEvent((CompEve
nt) e); }
}
29
MouseMotion Event Handler (example)
•
Method addMouseMotionListener(mymouseMotionAdapter) does:
mouseMotionListener  mymouseMotionAdapter
•
Methods .mouseMoved or .mouseDragged are implemented by you.
protected void processMouseMotionEvent(MouseEvent e) {
if (mouseMotionListener != null) {
int id = e.getId();
switch(id) {
case Mouseevent.MOUSE_MOVED:
mouseMotionListener.mouseMoved(e);
break;
case Mouseevent.MOUSE_DRAGGED:
mouseMotionListener.mouseDragged(e);
break;
}
}
}
processEvent
processMouseMotionEvent
userHandlerObj.mouseMoved
30
action Event Processing
•
•
Button’s event handler overrides
processEvent(). For action event, the
code in the right-hand box is
executed.
addActionListener(myactionAdapter)
does:
actionListener  myactionAdapter
protected void processEvent(AWTEvent e) {
if (e instanceof ActionEvent) {
processActionEvent((Actionevent) e);
return;
}
super.processEvent(e);
}
processActionEvent(ActionEvent e) {
if (actionListener != null)
actionListener.actionPerformed(e);
}
31
Window Layout
•
•
•
•
The default layout manager of content-panes is
BorderLayout(); the default layout for JPanel is
FlowLayout();
The default layout manager can be disabled by
setLayout().
The common layouts are FlowLayout, BorderLayout, and
GridLayout.
Use JPanel to effectively organize components in different
layouts and then arrange the JPanels in top-layer Layouts.
32
Flow Layout
• FlowLayout(align, hgap, vgap);
• setLayout(new FlowLayout(FlowLayout.CENTER));
33
Border Layout
• BorderLayout()
• To add components into a
container with BorderLayout,
the add method needs to specify
“North”, “South”, “East”,
“West”, or “Center”.
• The component at the Center
automatically fills the whole
unoccupied rectangle area from
the center.
34
Grid Layout (Cont.)
• GridLayout(rows, cols, hgap, vgap)
• When adding components into a frame with GridLayout, it fills the
row from left to the right before moving to the next row.
• Example of displaying a calculator pad:
public class calculator extends JApplet {
public void init() {
setLayout(new GridLayout(3,4,5,5));
add(new Button(“0”));
……
add(new Button(“9”));
}
35
Use Panel to Organize Components
~jia/www/java/gui/layoutTest.java
36
Download