Chapter 14: Windows and applets - PowerPoint PPT Presentation

1 / 30
About This Presentation
Title:

Chapter 14: Windows and applets

Description:

Chapter 14: Windows and applets Java provides cross-platform window facilities In Java 1, this has been done by AWT package However AWT had some problems – PowerPoint PPT presentation

Number of Views:124
Avg rating:3.0/5.0
Slides: 31
Provided by: sharifEdu
Learn more at: http://sina.sharif.edu
Category:

less

Transcript and Presenter's Notes

Title: Chapter 14: Windows and applets


1
Chapter 14 Windows and applets
  • Java provides cross-platform window facilities
  • In Java 1, this has been done by AWT package
  • However AWT had some problems
  • Main problem was the different lookfeel with
    other windows in the hosting OS
  • Java 2 introduced swing which creates more
    compatible look feel with the hosting OS
  • In java we can define two type of GUI
  • Applets which run inside a web browser
  • Applications which run as a stadnalone window
  • The model for applets and normal windows
    application is different, but with some efforts
    we can make applications that can be run as both

2
Applets
  • Programs that run inside a browser
  • When a browser loads a page that includes an
    applet, browser downloads the applet and starts
    it
  • Because normally an applet comes from another
    machine, java runtime environment enforce some
    restrictions on them
  • An applet cant touch the local disk. Java offers
    digital signing for applets. Many applet
    restrictions are relaxed when you choose to allow
    signed applets
  • Applets can take longer to display, since you
    must download the whole thing every time,
    including a separate server hit for each
    different class.

3
Application framework for applets
  • There is a JApplet class that all applets
    inherit from
  • An applet overrides some of the methods to do
    some usefull work

4
A simple applet
// c14Applet1.java // Very simple
applet. import javax.swing. import
java.awt. public class Applet1 extends JApplet
public void init() getContentPane().add(
new JLabel("Applet!"))
5
Running inside a browser
Basic taggs (old way!) in a web page ltapplet
codeApplet1 width100 height50gt
lt/appletgt Things not as simple as above now, but
we can use HTMLConverter to convert above to a
form acceptable by current browsers Internet
explorer display
6
Running applet as an application
// c14Applet1c.java // An application and an
applet. // ltapplet codeApplet1c width100
height50gtlt/appletgt import javax.swing. import
java.awt. public class Applet1c extends
JApplet public void init()
getContentPane().add(new JLabel("Applet!"))
// A main() for the application public static
void main(String args) JApplet applet
new Applet1c() JFrame frame new
JFrame("Applet1c") // To close the
application frame.setDefaultCloseOperation(JF
rame.EXIT_ON_CLOSE) frame.getContentPane().ad
d(applet) frame.setSize(100,50)
applet.init() applet.start()
frame.setVisible(true)
7
A display framework
In the book a display framework is implemented
that eases creation of applets and window
applications
public static void run(JFrame frame, int width,
int height) ... public static void
run(JApplet applet, int width, int
height)... public static void run(JPanel
panel, int width, int height) ...
8
Putting buttons
// c14Button1.java // Putting buttons on an
applet. // ltapplet codeButton1 width200
height50gtlt/appletgt import javax.swing. import
java.awt. import com.bruceeckel.swing. public
class Button1 extends JApplet private
JButton b1 new JButton("Button 1"), b2
new JButton("Button 2") public void init()
Container cp getContentPane()
cp.setLayout(new FlowLayout()) cp.add(b1)
cp.add(b2) public static void
main(String args) Console.run(new
Button1(), 200, 50)
9
Capturing an event
  • When we run previous program if we click on
    buttons nothing will happen!
  • For any control (e.g. a button) to do something
    usefull we need to write event handler code
  • To do this we first register for an event on a
    control. For example using addActionListener() on
    Jbutton to register for pressing button actions
  • addActionListener needs a class that implements
    ActionListener interface. This interface has a
    actionPerformed() method.

10
Example of event capturing
public class Button2 extends JApplet private
JButton b1 new JButton("Button 1"), b2
new JButton("Button 2") private JTextField
txt new JTextField(10) class ButtonListener
implements ActionListener public void
actionPerformed(ActionEvent e) String
name ((JButton)e.getSource()).getText()
txt.setText(name) private
ButtonListener bl new ButtonListener()
public void init() b1.addActionListener(bl)
b2.addActionListener(bl) Container cp
getContentPane() cp.setLayout(new
FlowLayout()) cp.add(b1) cp.add(b2)
cp.add(txt) public static void
main(String args) Console.run(new
Button2(), 200, 75)
11
Runnin the example
Pressing Button1
12
Controlling layout (layout manager) BorderLayout
public class BorderLayout1 extends JApplet
public void init() Container cp
getContentPane() cp.add(BorderLayout.NORTH,
new JButton("North")) cp.add(BorderLayout.SOU
TH, new JButton("South")) cp.add(BorderLayout
.EAST, new JButton("East"))
cp.add(BorderLayout.WEST, new JButton("West"))
cp.add(BorderLayout.CENTER, new
JButton("Center")) public static void
main(String args) Console.run(new
BorderLayout1(), 300, 250)
13
Controlling layout (layout manager) FlowLayout
public class FlowLayout1 extends JApplet
public void init() Container cp
getContentPane() cp.setLayout(new
FlowLayout()) for(int i 0 i lt 20 i)
cp.add(new JButton("Button " i))
public static void main(String args)
Console.run(new FlowLayout1(), 300, 250)
14
Controlling layout (layout manager) GridLayout
public class GridLayout1 extends JApplet
public void init() Container cp
getContentPane() cp.setLayout(new
GridLayout(7,3)) for(int i 0 i lt 20
i) cp.add(new JButton("Button " i))
public static void main(String args)
Console.run(new GridLayout1(), 300, 250)
15
Events and listener types
16
Swing components - Buttons
public class Buttons extends JApplet private
JButton jb new JButton("JButton") private
BasicArrowButton up new BasicArrowButton(Bas
icArrowButton.NORTH), down new
BasicArrowButton(BasicArrowButton.SOUTH),
right new BasicArrowButton(BasicArrowButton.EAST
), left new BasicArrowButton(BasicArrowButto
n.WEST) public void init() Container cp
getContentPane() cp.setLayout(new
FlowLayout()) cp.add(jb) cp.add(new
JToggleButton("JToggleButton")) cp.add(new
JCheckBox("JCheckBox")) cp.add(new
JRadioButton("JRadioButton")) JPanel jp
new JPanel() jp.setBorder(new
TitledBorder("Directions")) jp.add(up)
jp.add(down) jp.add(left)
jp.add(right) cp.add(jp) public
static void main(String args)
Console.run(new Buttons(), 350, 100)
17
Icons and tooltips-changing Jbutton and other
components look and feel
faces new Icon new ImageIcon(getClass().
getResource("Face0.gif")), new
ImageIcon(getClass().getResource("Face1.gif")),
new ImageIcon(getClass().getResource("Face2.gif"
)), new ImageIcon(getClass().getResource("Face
3.gif")), new ImageIcon(getClass().getResource
("Face4.gif")), jb new JButton("JButton",
faces3) ... jb.setRolloverIcon(faces1)
jb.setPressedIcon(faces2) jb.setDisabledIcon(
faces4) jb.setToolTipText("Yow!")
18
Diffent looks
19
Other components
  • TextFields For one line text entry
  • Borders For adding a border to a component
  • JscrollPane Provides a scrollable view for a
    component

20
Other components (cont.)
  • JtextPane A mini editor
  • Check Boxes
  • Radio buttons
  • Combo boxes (drop-down list)
  • List boxes allows multiple selection
  • JoptionPane Message boxes
  • Menus
  • etc.

21
Drawing
class SineDraw extends JPanel ... public void
paintComponent(Graphics g)
super.paintComponent(g) int maxWidth
getWidth() double hstep (double)maxWidth/(do
uble)points int maxHeight getHeight() pts
new intpoints for(int i 0 i lt points
i) ptsi (int)(sinesi maxHeight/2
.95 maxHeight/2) g.setColor(Color.RED
) for(int i 1 i lt points i) int
x1 (int)((i - 1) hstep) int x2
(int)(i hstep) int y1 ptsi-1
int y2 ptsi g.drawLine(x1, y1, x2,
y2) ....
22
Result
23
Other components (cont.)
  • Dialog boxes - A dialog box is a window that pops
    up out of another window
  • Sliders and progrss bars
  • Trees
  • Tables

24
Selecting look and feel
Try UIManager.setLookAndFeel(UIManager.
getSystemLookAndFeelClassName())
catch(Exception e) throw new
RuntimeException(e)
25
Binding events dynamically
It is possible to attache more than one listener
to each Button b1.addActionListener(new B())
b1.addActionListener(new B1()) During the
execution of the program, it is possible to
dynamically adde and remove listeners
txt.append("Button2 pressed\n") int end
list.size() - 1 if(end gt 0)
b2.removeActionListener( (ActionListener)
list.get(end)) list.remove(end)
26
Separating business logic from UI logic
class BusinessLogic private int modifier
public BusinessLogic(int mod) modifier mod
public void setModifier(int mod) modifier
mod public int getModifier() return
modifier // Some business operations
public int calculation1(int arg) return arg
modifier public class Separation extends
JApplet private JTextField t new
JTextField(15), mod new JTextField(15)
private Jbutton calc1 new JButton("Calculation
1"), private BusinessLogic bl new
BusinessLogic(2) public static int
getValue(JTextField tf) try return
Integer.parseInt(tf.getText())
catch(NumberFormatException e) return 0
class Calc1L implements ActionListener
public void actionPerformed(ActionEvent e)
t.setText(Integer.toString(
bl.calculation1(getValue(t))))
27
Visual builder tools and JavaBeans
  • Starting with Visual Basic, visual builder tools
    become very famous
  • They help in creating visual interfaces more
    easily and with more speed
  • In java, with the use of JavaBeans we can create
    components that can be handled by Java visual
    builders
  • In a typical visual builder tool you can drag
    and drop a component into a form and then modify
    its properties and write handlers for handling
    events on that component.

28
What is a JavaBean
A bean is a Class with some conventions applied
for naming methods 1. For a property named xxx,
you typically create two methods getXxx( ) and
setXxx( ). 2. For a boolean property, you can
use the get and set approach above, but you
can also use is instead of get. 3. Ordinary
methods of the Bean dont conform to the above
naming convention, but theyre public. 4. For
events, you use the Swing listener approach.
Its exactly the same as youve been seeing
addActionListener(ActionLister eListener) and
removeActionLister(ActionListener) to handle a
ActionEvent.
29
JavaBean example
public class BangBean extends JPanel implements
Serializable private int xm, ym private
int cSize 20 // Circle size private String
text "Bang!" private int fontSize 48
private Color tColor Color.RED private
ActionListener actionListener public
BangBean() addMouseListener(new ML())
addMouseMotionListener(new MML()) public
int getCircleSize() return cSize public
void setCircleSize(int newSize) cSize
newSize public String getBangText()
return text public void setBangText(String
newText) text newText public int
getFontSize() return fontSize public void
setFontSize(int newSize) fontSize
newSize
30
JavaBean example (cont.)
public Color getTextColor() return tColor
public void setTextColor(Color newColor)
tColor newColor public void
paintComponent(Graphics g)
super.paintComponent(g) g.setColor(Color.BLAC
K) g.drawOval(xm - cSize/2, ym - cSize/2,
cSize, cSize) // This is a unicast
listener, which is // the simplest form of
listener management public void
addActionListener(ActionListener l) throws
TooManyListenersException if(actionListener
! null) throw new TooManyListenersException
() actionListener l public void
removeActionListener(ActionListener l)
actionListener null ...
Write a Comment
User Comments (0)
About PowerShow.com