CS4273: Distributed System Technologies and Programming I

skatechildrenΛογισμικό & κατασκευή λογ/κού

3 Νοε 2013 (πριν από 3 χρόνια και 11 μήνες)

78 εμφανίσεις

CS4273: Distributed System Technologies and Programming I


Lecture 2: Introduction to Java and GUI

2

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/

3

Java: an Object
-
Oriented Programming Language

Object
-
Oriented Programming:


Encapsulation


Inheritance


Polymorphism

4

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) {


………}

5

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);




….

}

6

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 ?

7

Modifier: static


A variable or method defined
as
static

means that the
variable or the method belongs
to the class, and they are not
with objects.


Static variables / methods are
class variables / methods. There
is only one copy of them in the
system.


Class methods can only access
class variables. It cannot use
“this” reference, cannot call
normal methods, etc. But
normal methods can access
class variables.



class Rabbit {


static

int rabbits_count = 0;


int Age;


Rabbit (int Age) {


rabbits_count++;

// access static var



this
.Age = Age;


}


static

int count() {
// only use class variable


return rabbits_count;


}


}

object

object

Object Template

static vars
,



8

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






}

9

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"); }


}

10

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.

11

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.

12

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

13

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);

}

………..

14

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

}

}

15


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();


}


}

}

16

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”);

17

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
();

18

Event handling for TextField

JTextField event is “action” type:

// jia/www/java/gui/textField.java

public class textFieldTest extends JApplet {

JTextField textin, textout;

JTextArea textArea;

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));

}


class
TextHandler implements ActionListener

{


public void
actionPerformed
(ActionEvent e){


if (e.getSource() == textin) {


textArea.
setText
(textin.
getText
());


textout.setText(textin.getText());


}


}}}


19

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

…………

20

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.

21

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”);

// c is a choice


An “item” event is generated when an item of the Choice is selected
and you can get the item by:

String e.
getItem
();

// 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 drop
-
down menu) by:


addItemListener
()

22

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.


23

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.



24

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();


}

}


25

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

26

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());


}



27

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


……………
..

28

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 out
-
most 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);



}

…….

}

29

Process Event

Method
processEvent
() of the component is the

root of all of the event
-
type processing functions.


protected void
processEvent
(AWTEvent e) {


if (e instanceof FocusEvent) {



processFocusEvent
((FocusEvent) e);


} elseif (e instanceof MouseEvent) {



switch(e.getId()) {



case MouseEvent.MOUSE_PRESSED:



case MouseEvent.MOUSE_RELEASED:



case MouseEvent.MOUSE_CLICKED:



case MouseEvent.MOUSE_ENTERED:


case MouseEvent.MOUSE_EIXTED:



processMouseEvent
((MouseEvent)e);



break;


case MouseEvent.MOUSE_MOVED:


case MouseEvent.MOUSE_DRAGGED:



processMouseMotionEvent
((Mouse
Event)e);



break; }


} else if (e instanceof KeyEvent) {



processKeyEvent
((KeyEvent)e);


} elseif (e instanceof ComponentEvent) {



processComponentEvent
((CompEve
nt) e); }

}


30

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

31

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);


}

32

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.

33

Flow Layout


FlowLayout
(align, hgap, vgap);


setLayout(new FlowLayout(FlowLayout.CENTER));

34

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.

35

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”));


}

36

Use Panel to Organize Components

~jia/www/java/gui/layoutTest.java