Window Fundamentals 2 Component encapsulates all of the attributes of a visual component. All user...
-
Upload
ashlee-jefferson -
Category
Documents
-
view
221 -
download
0
Transcript of Window Fundamentals 2 Component encapsulates all of the attributes of a visual component. All user...
Window Fundamentals
2
Window Fundamentals
Component encapsulates all of the attributes of a visual component.
All user interface elements that are displayed on the screen and that interact with the user are subclasses of Component.
A Component object is responsible for remembering the current foreground and background colors and the currently selected text font.
Window Fundamentals
Container A container is responsible for laying out (that is,
positioning) any components that it contains. It does this through the use of various layout
managers
Window Fundamentals
Panel A Panel may be thought of as a recursively
nestable, concrete screen component. Panel is the superclass for Applet. When screen
output is directed to an applet, it is drawn on the surface of a Panel object.
In essence, a Panel is a window that does not contain a title bar, menu bar, or border.
Window Fundamentals
Window The Window class creates a top-level window Generally, Window objects are not created
directly. Instead, a subclass of Window called Frame.
Window Fundamentals
Frame Frame is a subclass of Window It has a title bar, menu bar, borders, and resizing
corners. If you create a Frame object from within an
applet, it will contain a warning message, such as “Java Applet Window,” to the user that an applet window has been created.
This message warns users that the window was started by an applet.
Frames
1. Frame( )
2. Frame(String title)
void setSize(int newWidth, int newHeight) To set the dimensions of the
window
void setVisible(boolean visibleFlag) void setVisible(boolean visibleFlag)
void setTitle(String newTitle) Setting a Window’s Title
Frames
import java.awt.*;
import java.awt.event.*;
class MyFrame extends Frame
{
MyFrame(String s)
{
super(s)
}
public void paint(Graphics g)
{
g.drawString("MCA Department",100,50);
}
Frames
public static void main(String args[])
{
MyFrame f = new MyFrame(“VESIT”);
f.setSize(200,100);
f.setVisible(true);
}
}
Frames// Create a child frame window from within an applet.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
/*
<applet code="AppletFrame" width=300 height=50>
</applet>
*/
class MyFrame extends Frame
{
MyFrame()
{
addWindowListener(new MyWindowAdapter(this));
}
Framespublic void paint(Graphics g)
{ g.drawString("Hello world",100,50);
}
}
class MyWindowAdapter extends WindowAdapter {
MyFrame f1;
public MyWindowAdapter(MyFrame f1)
{
this.f1 = f1;
}
public void windowClosing(WindowEvent we)
{
f1.setVisible(false);
}
}
Framespublic class AppletFrame1 extends Applet {
MyFrame f;
public void init() {
f = new MyFrame();
f.setSize(250, 250);
f.setVisible(true);
}
public void start() {
f.setVisible(true);
}
public void stop() {
f.setVisible(false);
}
public void paint(Graphics g) {
g.drawString("This is in applet window", 10, 20);
}
Frames
Color classColor(int red, int green, int blue)
1. void setColor(Color newColor)
2. Color getColor( )
import java.awt.*;
import java.applet.*;
/* <applet code=“ColorDemo" width=300 height=200>
</applet> */
public class ColorDemo extends Applet
{
public void paint(Graphics g) {
g.setColor(Color.green);
g.drawString(“Hello World”, 50,50);
}
}
Graphics Class
All graphics are drawn relative to a window. This can be the main window of an applet, a child
window of an applet, or a stand-alone application window.
The origin of each window is at the top-left corner and is 0,0.
Coordinates are specified in pixels.
17
Graphics Primitives For drawing geometric shapes, texts An abstract class
– the extended class must override paint()
Oval
Rectangle
Arc
Line
RoundRectangle
Polygon
18
Drawing Lines
public void paint(Graphics g){ g.setColor(Color.blue); g.drawLine(0, 0, 100, 100); g.drawLine(0, 100, 100, 0); }
(x1,y1)
(x2,y2)
void drawLine(int startX, int startY, int endX, int endY)
Drawing Rectangles
public void paint(Graphics g) { g.setColor(Color.pink);
g.drawRect(10, 10, 60, 50); g.fillRect(100, 10, 60, 50);}
void drawRect(int top, int left, int width, int height)
void fillRect(int top, int left, int width, int height)
Drawing Rounded Rectangles
void drawRoundRect(int top, int left, int width, int height, int xDiam, int yDiam)
void fillRoundRect(int top, int left, int width, int height, int xDiam, int yDiam)
xDiam: diameter of the rounding arc along the X axis
yDiam: diameter of the rounding arc along the Y axis
public void paint(Graphics g) { g.setColor(Color.yellow);
g.drawRoundRect(190, 10, 60, 50, 15, 15); g.fillRoundRect(70, 90, 140, 100, 30, 40);}
21
Drawing Ellipses and Circles
public void paint(Graphics g) {
g.setColor(Color.blue);
g.drawOval(10, 10, 75, 50);
g.fillOval(100, 10, 50, 50);
}
void drawOval(int top, int left, int width, int height)
void fillOval(int top, int left, int width, int height)
• ellipse is drawn within a bounding rectangle specified by top,left , width
and height.
•To draw a circle, specify a square as the bounding rectangle
Drawing Arcs1. void drawArc(int top, int left, int width, int height,
int startAngle, int sweepAngle)
1. void fillArc(int top, int left, int width, int height,
int startAngle, int sweepAngle)
arc is bounded by the rectangle specified by top, left , width
and height.
The arc is drawn from startAngle through the angular
distance
specified by sweepAngle.
Drawing Arcs
public void paint(Graphics g)
{
g.setColor(Color.orange);
g.drawArc(10, 40, 70, 70, 0, 75);
g.fillArc(100, 40, 70, 70, 0, 75);
}
Drawing Polygons
public void paint(Graphics g) { g.setColor(Color.green);
int xs[] = {161,161,185,209,185,161};
int ys[] = {310,334,358,334,310,310};
g.fillPolygon(xs,ys,6); }
void drawPolygon(int x[ ], int y[ ], int numPoints)
void fillPolygon(int x[ ], int y[ ], int numPoints)
Font class
Font(String fontName, int fontStyle, int pointSize)
fontStyl: Font.PLAIN, Font.BOLD, and Font.ITALIC.
To combine styles: Font.BOLD | Font.ITALIC
void setFont(Font fontObj)
Font class
public void paint(Graphics g)
{
g.setColor(Color.blue);
Font f = new Font(“TimesRoman”,Font.BOLD,20);
g.setFont(f);
g.drawString(“Hello World”, 50,50);
}
27
Using AWT Components Component
CanvasScrollbarButtonCheckboxLabelListChoiceTextComponent
TextArea TextField
Component– Container
• Panel
• Window– Dialog
» FileDialog
– Frame
MenuComponent– MenuItem
• Menu
Using AWT Components
Component add(Component compObj)
void remove(Component obj)
Labels
Label( )
Label(String str)
void setText(String str)
String getText( )
Labels
public void init()
{
Label one = new Label("One");
Label two = new Label("Two");
Label three = new Label("Three");
add(one);
add(two);
add(three);
}
Buttons
Button( )
Button(String str)
void setLabel(String str)
String getLabel( )
31
32
Buttonspublic void init()
{
Button yes = new Button("Yes");
Button no = new Button("No");
Button maybe = new Button("Undecided");
add(yes);
add(no);
add(maybe);
}
Buttons : Event Handlingimport java.awt.*;
import java.awt.event.*;
import java.applet.*;
/*
<applet code="ButtonDemo" width=250 height=150>
</applet>
*/
public class ButtonDemo extends Applet implements ActionListener
{
String msg = "";
Button yes, no, maybe;
Buttons : Event Handling public void init()
{
yes = new Button("Yes");
no = new Button("No");
maybe = new Button("Undecided");
add(yes);
add(no);
add(maybe);
yes.addActionListener(this);
no.addActionListener(this);
maybe.addActionListener(this);
}
Buttons : Event Handling
public void actionPerformed(ActionEvent ae)
{
msg = ae.getActionCommand();
repaint();
}
public void paint(Graphics g)
{
g.drawString("Pressed: "+msg, 6, 100);
}
}
Buttons : Event Handling
Checkboxes Checkbox( )
Checkbox(String str)
Checkbox(String str, boolean on)
Checkbox(String str, CheckboxGroup cbGroup, boolean on)
boolean getState( )
void setState(boolean on)
String getLabel( )
void setLabel(String str)
Checkboxes: Event Handlingpublic class CheckboxDemo extends Applet implements ItemListener {
String msg = "";
Checkbox c, cpp, java;
public void init()
{
c = new Checkbox("C", null, true);
cpp = new Checkbox("C++");
java = new Checkbox("JAVA");
add(c);
add(cpp);
add(java);
Checkboxes: Event Handling
c.addItemListener(this);
cpp.addItemListener(this);
java.addItemListener(this);
}
public void itemStateChanged(ItemEvent ie)
{
repaint();
}
Checkboxes: Event Handling
public void paint(Graphics g)
{
msg = c.getLabel()+ " : " + c.getState();
g.drawString(msg, 6, 100);
msg = cpp.getLabel()+ " : " + cpp.getState();
g.drawString(msg, 6, 120);
msg = java.getLabel()+ " : " + java.getState();
g.drawString(msg, 6, 140);
}
}
Checkboxes: Event Handling
CheckboxGroup
Checkbox getSelectedCheckbox( ) void setSelectedCheckbox(Checkbox which)
43
CheckboxGrouppublic class CBGroup extends Frame { public CBGroup(){
CheckboxGroup cbg = new CheckboxGroup();Checkbox cb1 = new Checkbox(“C”, cbg,false);Checkbox cb2 = new Checkbox(“JAVA”, cbg, true);add(cb1);add(cb2);add(cb3);
}…}
44
Choices
1. void add(String name) : To add a selection to the list
2. String getSelectedItem( )
3. int getSelectedIndex( )
45
Choicespublic class ColorChoice extends Applet implements ItemListener { Choice c1; Color color;
public void init() { c1 = new Choice(); c1.addItem("Red"); c1.addItem("Green"); c1.addItem("Blue"); c1.addItemListener(this); add(c1); }
46
Choices public void itemStateChanged(ItemEvent ie) { if(c1.getSelectedItem().equals("Red")) color = Color.red; else if(c1.getSelectedItem().equals("Green")) color = Color.green; else color = Color.blue; repaint(); } public void paint(Graphics g) { setBackground(color); }}
Lists List( )
List(int numRows)
List(int numRows, boolean multipleSelect)
void add(String name)
void add(String name, int index)
String getSelectedItem( )
int getSelectedIndex( )
Lists
public void init() {
List list = new List();
list.add("Hydrogen");
list.add("Helium");
list.add("Carbon");
list.add("Oxygen");
add(list);
}
TextField
TextField( )
TextField(int numChars)
TextField(String str)
TextField(String str, int numChars)
String getSelectedText( )
TextArea
TextArea( )
TextArea(int numLines, int numChars)
TextArea(String str)
TextArea(String str, int numLines, int numChars)
void append(String str)
MenuBar, Menu, & MenuItem
Menu bar contains one or more Menu objects.
Each Menu object contains a list of MenuItem objects.
Each MenuItem object represents something that can be
selected by the user.
MenuBar, Menu, & MenuItemMenuBar mb = new MenuBar();
setMenuBar(mb);
// Create menu A
Menu a = new Menu("A");
mb.add(a);
MenuItem a1 = new MenuItem("A1");
MenuItem a2 = new MenuItem("A2");
MenuItem a3 = new MenuItem("A3");
a.add(a1);
a.add(a2);
a.add(a3);
MenuBar, Menu, & MenuItem// Create menu B
Menu b = new Menu("B");
mb.add(b);
MenuItem b1 = new MenuItem("B1");
MenuItem b2 = new MenuItem("B2");
b.add(b1);
b.add(b2);
MenuBar, Menu, & MenuItem
// Create sub-menu for B3
Menu b3 = new Menu("B3");
b.add(b3);
MenuItem b31 = new MenuItem("B31");
MenuItem b32 = new MenuItem("B32");
b3.add(b31);
b3.add(b32);
55
Arranging components
Every Container has a layout manager
The default layout for a Panel is FlowLayout
An Applet is a Panel therefore, the default layout for a Applet
is FlowLayout
The layout manager is set by the setLayout( ) method.
void setLayout(LayoutManager layoutObj)
Layout of Components
FlowLayout– left to right & top
down
BorderLayout – north, south, west, east
& center
CardLayout– stack of panels
GridLayout– tabular form
– rows & columns
57
FlowLayout
Use add(component); to add to a component when using
a FlowLayout
Components are added left-to-right
If no room, a new row is started
FlowLayout is convenient but often ugly
58
FlowLayout1. FlowLayout( )
the default layout, which centers components and leaves five pixels of space between each component.
2. FlowLayout(int how) specify how each line is aligned. Valid values for how are as follows:
1. FlowLayout.LEFT
2. FlowLayout.CENTER
3. FlowLayout.RIGHT
3. FlowLayout(int how, int horz, int vert) horz and vert the horizontal and vertical space left between
components
59
FlowLayout
import java.awt.*;import java.applet.*;
public class FlowLayoutExample extends Applet { public void init () { setLayout (new FlowLayout ()); add (new Button ("One")); add (new Button ("Two")); add (new Button ("Three")); add (new Button ("Four")); add (new Button ("Five")); add (new Button ("Six")); }}
BorderLayout BorderLayout( ) BorderLayout(int horz, int vert)
BorderLayout defines the following constants that specify the regions:
1. BorderLayout.CENTER
2. BorderLayout.SOUTH
3. BorderLayout.EAST
4. BorderLayout.WEST
5. BorderLayout.NORTH
61
BorderLayout At most five components can be added
void add(Component compObj, Object region)
If you want more components, add a Panel, then add components to it.
add (new Button("NORTH"), BorderLayout.NORTH);
62
BorderLayout
public void init() { setLayout (new BorderLayout ()); add (new Button ("NORTH"), BorderLayout.NORTH); add (new Button ("SOUTH"), BorderLayout.SOUTH); add (new Button ("EAST"), BorderLayout.EAST); add (new Button ("WEST"), BorderLayout.WEST); add (new Button ("CENTER"), BorderLayout.CENTER);}
63
BorderLayoutimport java.awt.*;import java.applet.*;
public class BorderLayoutExample extends Applet { public void init () { setLayout (new BorderLayout()); add(new Button("One"), BorderLayout.NORTH); add(new Button("Two"), BorderLayout.WEST); add(new Button("Three"), BorderLayout.CENTER); add(new Button("Four"), BorderLayout.EAST); add(new Button("Five"), BorderLayout.SOUTH); add(new Button("Six"), BorderLayout.SOUTH); }}
64
Using a Panel
Panel p = new Panel(); add (p, BorderLayout.SOUTH); p.add (new Button ("Button 1")); p.add (new Button ("Button 2"));
65
GridLayout
The GridLayout manager divides the container up into a
given number of rows and columns:
GridLayout(int rows, int columns)
All sections of the grid are equally sized and as large as
possible
66
GridLayoutimport java.awt.*;
import java.applet.*;
public class GridLayoutExample extends Applet {
public void init () {
setLayout(new GridLayout(2, 3));
add(new Button("One"));
add(new Button("Two"));
add(new Button("Three"));
add(new Button("Four"));
add(new Button("Five"));
}
}
CardLayout
The CardLayout class can store several different layouts.
Each layout can be thought of as being on a separate index card
in a deck that can be shuffled so that any card is on top at a given
time.
Useful for user interfaces that can be dynamically enabled and
disabled upon user input.
User can keep other layouts hidden, ready to be activated when
needed.
CardLayout
CardLayout( )
CardLayout(int horz, int vert)
CardLayout : How to Use?
The cards are typically held in an object of type Panel.
The cards that form the deck are also typically objects of
type Panel.
This panel must have CardLayout selected as its layout
manager.
Thus, Create a panel that contains the deck and a panel for
each card in the deck.
CardLayout : How to Use?
Next, add components to the appropriate panel toform each card.
Add these panels to the Deck panel for which CardLayout is the
layout manager.
Finally, add Deck panel to the window.
Provide some way for the user to select between cards, common
approach is to include one push button for each card in the deck.
CardLayout: Example
CardLayout: Examplepublic class CardLayoutDemo extends Applet
implements ActionListener {
Checkbox Win98, winNT, solaris, mac;
Panel osCards;
CardLayout cardLO;
Button Win, Other;
public void init() {
Win = new Button("Windows");
Other = new Button("Other");
add(Win);
add(Other);
CardLayout: Example
cardLO = new CardLayout();
osCards = new Panel();
osCards.setLayout(cardLO); // set Deck panel layout to card layout
Win98 = new Checkbox("Windows 98", null, true);
winNT = new Checkbox("Windows NT/2000");
solaris = new Checkbox("Solaris");
mac = new Checkbox("MacOS");
// add Windows check boxes to a card panel
Panel winPan = new Panel();
winPan.add(Win98);
winPan.add(winNT);
CardLayout: Example // Add other OS check boxes to a card panel
Panel otherPan = new Panel();
otherPan.add(solaris);
otherPan.add(mac);
// add panels to card deck panel
osCards.add(winPan, "Windows");
osCards.add(otherPan, "Other");
// add cards to main applet panel
add(osCards);
// register to receive action events
Win.addActionListener(this);
Other.addActionListener(this);
}
CardLayout: Example
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == Win)
cardLO.show(osCards, "Windows");
else
cardLO.show(osCards, "Other");
}
}