GUI Programming, Building Applets and Introduction to Annotations: Unit-5 By: Vishal Rajput Narmada College of Computer Application-523 Mr. Vishal Rajput • An applet is a special kind of java program that is designed to be transmitted over the internet and automatically executed by a javacompatible web browser. • Furthermore, an applet is downloaded on demand, just like an image, sound file, or video clip. • The important difference is that an applet is an intelligent program, not just an animation or media file. • The Applet class is contained in the java.applet package. Applet contains several methods that give you detailed control over the execution of your applet. • Java.applet also defines 3 interfaces: AppletContext, AudioClip and AppletStub. • All applets are subclasses of Applet. Thus, all applets must import java.applet. Applet must also import java.awt (abstract window toolkit). Since all applets run in a window, it is necessary to include support for that window. Mr. Vishal Rajput • Applets are not executed by the console based java run-time interpreter. Rather they are executed by either a web browser or an applet viewer called appletviewer, provided by the JDK. • Once an applet has been compiled, it is included in an HTML file using APPLET tag. The applet will be executed by a java-enabled web-browser when it encounters the APPLET tag within the HTML file. • This requires that the applet code imports the java.awt package that contains the Graphics class. All output operations of an applet are performed using the methods defined in the Graphics class. • A main() method is not invoked on an applet, and an applet class will not define main(). Mr. Vishal Rajput Demo Program import java.applet.Applet; import java.awt.Graphics; /* <applet code="FirstApplet" width=200 height=200> </applet> */ public class FirstApplet extends Applet { public void paint(Graphics g) { g.drawString("This is my first applet.",20,100); } } Mr. Vishal Rajput <html> <body> <applet code="SecondApplet.java" width=200 height=200> </applet> </body> </html> Mr. Vishal Rajput • Javac FirstApplet.java • Appletviewer FirstApplet.java • The 1st and 2nd lines import the java.applet.Applet and java.awt.Graphics classes. • Applet class is the superclass of all applets. The Graphics class is provided by the awt. • The next lines define a java comment. That comment is HTML source code. The applet tag specifies which class contains the code for this applet. • It also defines the width and height in pixels of the display area. Applet viewer reads the HTML and interprets the info that is contained between the applet tags. • The HTML is not part of the applet and is not used by a web browser. It is used only by the applet viewer. • The next line declares that firstApplet extends Applet. Each applet that you create must extends this class. Mr. Vishal Rajput • Paint() is responsible for generating the output of the applet. It accepts a Graphics object as its one argument. It is automatically invoked whenever the applet needs to be displayed. • The actual output of the string is done by calling the drawString() method of the Graphics object. x,y coordinate – at which to begin the string. • Applet viewer executes an applet by using the HTML source code. Width and height attributes of the applet tag define the dimensions of the applet display area. • Applet may also be executed by a web browser. Mr. Vishal Rajput Applet Life Cycle Born and initialization state • Applet enters the initialization state when it is first loaded. This is achieved by calling the init() method of Applet class. The applet is born. At this stage we may do the following if required: 1. Create objects needed by the applet 2. Set up initial values 3. Load images or fonts 4. Set up colors The initialization occurs only once in the applet’s life cycle. To provide any of the behaviors mentioned above, we must override the init() method. public void init() { Action } Mr. Vishal Rajput Running state(Start) • Applet enters the running state when the system calls the start() method of Applet class. • This occurs automatically after the applet is initialized. • Starting can also occur if the applet is already in “stopped” (idle) state. For example, we may leave the web page containing the applet temporarily to another page and return back to the page. This again starts the applet running. Unlike init() method, the start() method may be called more than once. We may override the start() method to create a thread to control the applet. public void start() { Action } Mr. Vishal Rajput Idle or Stopped state • An applet becomes idle when it is stopped from running stopping occurs automatically when we leave the page containing the currently running applet. We can also do so by calling the stop() method explicitly. If we use a thread to run the applet, then we must use stop() method to terminate the thread. We can achieve by overriding the stop() method. public void stop() { Action } When the browser moves to another page. You can use this method to stop additional execution threads Mr. Vishal Rajput Dead state(destroy) • An applet is said to be dead when it is removed from memory. This occurs automatically by invoking the destroy() method when we quit the browser. Like initialization, destroying stage occurs only once in the applet’s life cycle. If the applet has created any resources, like threads, we may override the destroy() method to clean up these resources. public void destroy() { Action } Mr. Vishal Rajput Display state • Applet moves to the display state whenever it has to perform some output operations on the screen. This happens immediately after the applet enters into the running state. The paint() method is called to accomplish this task. Almost every applet will have a paint() method. public void paint( Graphics g) { Display statement; } • It is to be noted that the display state is not considered as a part of the applet’s life cycle. In fact, the paint() method is defined in the Applet class. It is inherited form the component class, a super class of Applet. Mr. Vishal Rajput Graphics Class • A Graphics object encapsulates a set of methods that can perform graphics output. • Specifically, it allows you to draw lines, ovals, rectangles, strings, images, characters, and arcs. Mr. Vishal Rajput //Demo program of Graphics class import java.applet.*; import java.awt.*; /*<applet code="b.class" height="250" width="400"></applet>*/ public class b extends Applet { public void paint(Graphics g) { g.setColor(Color.red); g.drawLine(5,30,350,30); g.setColor(Color.blue); g.drawRect(5,40,90,55); g.fillRect(100,40,90,55); g.setColor(Color.cyan); g.fillRoundRect(195,40,90,55,50,50); g.drawRoundRect(290,40,90,55,20,20); g.setColor(Color.yellow); g.draw3DRect(5,100,90,55,true); g.fill3DRect(100,100,90,55,false); g.setColor(Color.magenta); g.drawOval(195,100,90,55); g.fillOval(290,100,90,55); } } Mr. Vishal Rajput AWT v/s Swing Component AWT SWING AWT stands for Abstract windows toolkit. Swing is also called as JFC’s (Java Foundation classes). AWT components are called Heavyweight Swings are called light weight component component. because swing components occupies a less memory AWT components require java.awt package. Swing components require javax.swing package. AWT components are platform dependent. Swing components are made in purely java and they are platform independent. AWT s not supported look feel . We can have different look and feel in Swing. Import Java.awt.*; Import javax.swing.*; Mr. Vishal Rajput Event Handling • Delegation Event Model – The modern approach to handling events is based on the delegation event model, which defines standard and consistent mechanisms to generate and process events. – The delegation event model provides a standard mechanism for a source to generate an event and send it to a set of listeners. Mr. Vishal Rajput Event • An event is an object that describes a state change in a source. It can be generated as a consequence of a person interacting with the elements in a graphical user interface. • Some of the activities that causes events to be generated are pressing a button, entering a character via the keyboard, selecting an item in a list and clicking the mouse. • Events may also occur that are not directly interact with a user interface. For example, an event may be generated when a timer expires, a counter exceeds a value, a software or hardware failure occurs, or an operation is completed. We are free to define events that are appropriate for our application. Mr. Vishal Rajput Event Sources • A source is an object that generates an event. This occurs when the internal state of that object changes in some way. Sources may generate more than one type of event. • A source must register listeners in order for the listeners to receive notifications about a specific type of event. Each type of event has its own registration method. Mr. Vishal Rajput Event Listner • A listener is an object that is notified when an event occurs. It has two major requirements. First, it must have been registered with one or more sources to receive notifications about specific types of events. Second, it must implement methods to receive and process these notifications. • The method that receive and process events are defined in a set of interfaces found in java.awt.event. For example, the MouseMotionListener interface defines two methods to receive notifications when the mouse is dragged or moved. Any object may receive and process one or both of these events if it provides an implementation of this interface. Mr. Vishal Rajput Event Object • At the root of the Java event class hierarchy is EventObject, which is in java.util. it is the superclass for all events. Its one constructor is shown here: – EventObject(Object src) – here, src is the object that generates this event. – EventObject contains two methods: • getSource() • toString() • The getSource() method returns the source of the event. Its general form is shown here: – Object.getSource() • toString() returns the string equivalent of the event. Mr. Vishal Rajput Mr. Vishal Rajput Mr. Vishal Rajput ActionListener • This interface defines the actionPerformed( ) method that is invoked when an action event occurs. Its general form is shown here: – void actionPerformed(ActionEvent ae) Mr. Vishal Rajput import java.awt.event.*; import java.awt.*; import java.applet.Applet; /* <applet code=appl4.class height=200 width=300> </applet> */ public class appl4 extends Applet implements ActionListener { Label l1,l2; Button b1; TextField t1,t2,r; Panel p1,p2; public void init() { l1=new Label("Enter the Number"); l2=new Label("Result"); t1=new TextField(5); t2=new TextField(5); r=new TextField(5); b1=new Button("Submit"); p1=new Panel(); p2=new Panel(); b1.addActionListener(this); p1.setBackground(Color.pink); p2.setBackground(Color.green); add(p1); add(p2); p1.add(l1); p1.add(t1); p1.add(t2); p2.add(l2); p2.add(r); p2.add(b1); } public void actionPerformed(ActionEvent ae) { int n1,n2; n1=Integer.parseInt(t1.getText()); n2=Integer.parseInt(t2.getText()); r.setText(""+(n1+n2)); } } Mr. Vishal Rajput Mr. Vishal Rajput The KeyListener Interface • This interface defines three methods. The keyPressed( ) and keyReleased( ) methods are invoked when a key is pressed and released, respectively. The keyTyped( ) method is invoked when a character has been entered. • For example, if a user presses and releases the A key, three events are generated in sequence: key pressed, typed, and released. If a user presses and releases the HOME key, two key events are generated in sequence: key pressed and released. Mr. Vishal Rajput MouseListener Interface • This interface defines five methods. If the mouse is pressed and released at the same point, mouseClicked( ) is invoked. When the mouse enters a component, the mouseEntered( ) method is called. When it leaves, mouseExited( ) is called. The mousePressed( ) and mouseReleased( ) methods are invoked when the mouse is pressed and released, respectively. • The general forms of these methods are shown here: – void mouseClicked(MouseEvent me) – void mouseEntered(MouseEvent me) – void mouseExited(MouseEvent me) – void mousePressed(MouseEvent me) – void mouseReleased(MouseEvent me) Mr. Vishal Rajput MouseMotionListener Interface • This interface defines two methods. The mouseDragged( ) method is called multiple times as the mouse is dragged. The mouseMoved( ) method is called multiple times as the mouse is moved. Their general forms are shown here: – void mouseDragged(MouseEvent me) – void mouseMoved(MouseEvent me) Mr. Vishal Rajput ItemListener Interface • This interface defines the itemStateChanged( ) method that is invoked when the state of an item changes. Its general form is shown here: – void itemStateChanged(ItemEvent ie) – Eg: CheckBox Mr. Vishal Rajput WindowListener Interface • • This interface defines seven methods. The windowActivated( ) and windowDeactivated( ) methods are invoked when a window is activated or deactivated, respectively. If a window is iconified, the windowIconified( ) method is called. When a window is deiconified, the windowDeiconified( ) method is called. When a window is opened or closed, the windowOpened( ) or windowClosed( ) methods are called, respectively. The windowClosing( ) method is called when a window is being closed. The general forms of these methods are – voidwindowActivated(WindowEvent e)Invoked when the Window is set to be the active Window. – voidwindowClosed(WindowEvent e)Invoked when a window has been closed as the result of calling dispose on the window. – voidwindowClosing(WindowEvent e)Invoked when the user attempts to close the window from the window's system menu. – voidwindowDeactivated(WindowEvent e)Invoked when a Window is no longer the active Window. – voidwindowDeiconified(WindowEvent e)Invoked when a window is changed from a minimized to a normal state. – voidwindowIconified(WindowEvent e)Invoked when a window is changed from a normal to a minimized state. – voidwindowOpened(WindowEvent e)Invoked the first time a window is made visible. Mr. Vishal Rajput Focus Listeners • Focus listeners listen for a component gaining or losing keyboard focus. Usually there are visual clues as to which component has the focus, such as an active cursor in a text field. The FocusListener interface has two methods, whose signatures are: – public void focusGained(FocusEvent e) – public void focusLost(FocusEvent e) Mr. Vishal Rajput Adapter Class • If you implement Listener interface then obviously you must have to override all the methods declare in an interface. • Suppose in special case you want to just need one or two method among given set of methods then what? If you are implementing listener interface then you can not omit any method. • Adapter class implements listener interface and contains empty implementation of each method declared in the listener interface, when you extends these Adapter class you need to implement only those methods that you want. • When we are dealing with Listener interface we are implementing listeners while we working with adapter class we have to extends adapter class and override methods which we need. Mr. Vishal Rajput List of Adapter class and its Listener Interface: ComponentAdapter - ComponentAdapter ContainerAdapter - ContainerListener FocusAdapter - FocusListener KeyAdapter - KeyListener MouseAdapter - MouseListener MouseMotionAdapter - MouseMotionListener WindowAdapter - WindowListener Mr. Vishal Rajput import java.awt.*; import java.awt.event.*; import java.applet.*; /* <applet code="AdapterDemo" width=300 height=100> </applet> */ public class AdapterDemo extends Applet { public void init() { addMouseListener(new MyMouseAdapter(this)); addMouseMotionListener(new MyMouseMotionAdapter(this)); } } class MyMouseAdapter extends MouseAdapter //extends the MouseAdapter class instead of Interface { AdapterDemo adapterDemo;//Create object of main class to recive the value. public MyMouseAdapter(AdapterDemo adapterDemo) { this.adapterDemo = adapterDemo;// constructor Initialize the value to the main class obj } // Handle mouse clicked. public void mouseClicked(MouseEvent me) { adapterDemo.showStatus("Mouse clicked"); } } class MyMouseMotionAdapter extends MouseMotionAdapter { AdapterDemo adapterDemo; public MyMouseMotionAdapter(AdapterDemo adapterDemo) { this.adapterDemo = adapterDemo; } // Handle mouse dragged. public void mouseDragged(MouseEvent me) { adapterDemo.showStatus("Mouse dragged"); } } Mr. Vishal Rajput Introduction to layouts • components are placed on a form is controlled by a "layout manager" that decides how the components lie based on the order that you add( ) them. • The size, shape, and placement of components will be remarkably different from one layout manager to another. In addition, the layout managers adapt to the dimensions of your applet or application window, so if that window dimension is changed (for example, in the HTML page’s applet specification) the size, shape, and placement of the components could change. • This section gives you an overview of some layout managers that the Java platform provides, gives you some general rules for using layout managers. Mr. Vishal Rajput • Some layouts provided by JAVA – Flow Layout (Default Layout) – Border Layout – Grid Layout – Card Layout Mr. Vishal Rajput Using Flow Layout • Default layout scheme: the FlowLayout. This simply "flows" the components onto the form, from left to right until the top space is full, then moves down a row and continues flowing the components. Mr. Vishal Rajput import java.awt.*; import java.awt.event.*; import java.applet.*; public class flowlayout extends Applet implements ItemListener { String msg=" "; Checkbox Win98,winNT,solaris,mac; public void init() { setLayout(new FlowLayout(FlowLayout.LEFT)); Win98=new Checkbox("Windows 98",null,true); winNT=new Checkbox("Windows NT"); solaris=new Checkbox("MacOS"); add(Win98); add(winNT); add(solaris); add(mac); Win98.addItemListener(this); winNT.addItemListener(this); solaris.addItemListener(this); mac.addItemListener(this); } public void itemStateChanged(ItemEvent id) {repaint();} public void paint(Graphics g) { msg="Current state : "; g.drawString(msg,6,80); msg="Windows 98 : " + Win98.getState(); g.drawString(msg,6,100); msg="Windows NT : " + winNT.getState(); g.drawString(msg,6,120); msg="Solaris : " + solaris.getState(); g.drawString(msg,6,140); msg="Mac : " + mac.getState(); g.drawString(msg,6,160); } } Mr. Vishal Rajput Using Border Layout • This layout manager has the concept of four border regions and a center area. When you add something to a panel that’s using a BorderLayout you must use an add( ) method that takes a String object as its first argument, and that string must specify (with proper capitalization) "North" (top), "South" (bottom), "East" (right), "West" (left), or "Center." If you misspell or misscapitalize, you won’t get a compile-time error, but the applet simply won’t do what you expect. Mr. Vishal Rajput import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class border extends Applet { Scrollbar hscr1,hscr2,vscr1,vscr2; TextField txtbox; public void init() { setLayout(new BorderLayout()); hscr1 = new Scrollbar(Scrollbar.HORIZONTAL,1,10,1,200); hscr2 = new Scrollbar(Scrollbar.HORIZONTAL,1,10,1,200); vscr1 = new Scrollbar(Scrollbar.VERTICAL,1,10,1,200); vscr2 = new Scrollbar(Scrollbar.VERTICAL,1,10,1,200); txtbox = new TextField("Welcome to Border Layout"); add("North",hscr1); add("West",vscr1); add("South",hscr2); add("East",vscr2); add("Center",txtbox); } } Mr. Vishal Rajput GridLayout • A GridLayout allows you to build a table of components, and as you add them they are placed left-to-right and top-to-bottom in the grid. In the constructor you specify the number of rows and columns that you need and these are laid out in equal size. Mr. Vishal Rajput import java.awt.*; import java.applet.*; public class gridlayout extends Applet { static final int n=4; public void init() { setLayout(new GridLayout(n,n)); setFont(new Font("SansSerif",Font.BOLD,24)); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { int k=i*n+j; if(k>0) add(new Button(" " +k)); } } } } Mr. Vishal Rajput Using Card Layout • The CardLayout allows you to create the rough equivalent of a "tabbed dialog," which in more sophisticated environments has actual file-folder tabs running across one edge, and all you have to do is press a tab to bring forward a different dialog. Not so in the AWT: The CardLayout is simply a blank space and you’re responsible for bringing forward new cards Mr. Vishal Rajput import java.awt.*; import java.awt.event.*; import java.applet.*; public class cardlayout extends Applet implements ActionListener, MouseListener { 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); cardlo=new CardLayout(); oscards=new Panel(); oscards.setLayout(cardlo); Win98=new Checkbox("Windows 98",null,true); winNT=new Checkbox("Windows NT"); solaris=new Checkbox("Solaris"); mac=new Checkbox("MacOS"); Panel winpan=new Panel(); winpan.add(Win98); winpan.add(winNT); Panel otherpan=new Panel(); otherpan.add(solaris); otherpan.add(mac); oscards.add(winpan,"Windows"); oscards.add(otherpan,"Other"); add(oscards); win.addActionListener(this); other.addActionListener(this); addMouseListener(this); } public void mousePressed(MouseEvent me) { cardlo.next(oscards); } public void mouseClicked(MouseEvent me) { } public void mouseEntered(MouseEvent me) { } public void mouseExited(MouseEvent me) { } public void mouseReleased(MouseEvent me) { } public void actionPerformed(ActionEvent ae) { if(ae.getSource() == win) { cardlo.show(oscards,"Windows"); } else { cardlo.show(oscards,"Other"); } } } Mr. Vishal Rajput PARAM Teg • The PARAM tag allows you to specify applet-specific arguments in an HTML page. Applets access their attributes with the getParameter( ) method. • It returns the value of the specified parameter in the form of a String object. Thus, for numeric and boolean values, you will need to convert their string representations into their internal formats. Mr. Vishal Rajput /* <applet code="MyApplet2.class" width = 600 height= 450> <param name = "t1" value="Shree Ganesh"> <param name = "t2" value ="1985"> </applet> */ import java.applet.*; import java.awt.*; public class MyApplet2 extends Applet { String n; String id; public void init() { n = getParameter("t1"); id = getParameter("t2"); } public void paint(Graphics g) { g.drawString("Name is : " + n, 100,100); g.drawString("Id is : "+ id, 100,150); } } Mr. Vishal Rajput AWT Component Properties Mr. Vishal Rajput Buttons • Properties of Button – – – – To create push button: Button b1 =new Button("label"); To get the label of the button: String l = b1.getLabel(); To set the label of the button: b1.setLabel("label"); To get the label of the button clicked: String str = ae.getActionCommand(); Mr. Vishal Rajput CheckBox • A Checkbox is a square shaped box which provides a set of options to the user. – To create a Checkbox: Checkbox cb = new Checkbox ("label"); – To create a checked Checkbox: Checkbox cb = new Checkbox ("label", true); – To get the state of a Checkbox: boolean b = cb.getState (); – To set the state of a Checkbox: cb.setState (true); – To get the label of a Checkbox: String s = cb.getLabel (); Mr. Vishal Rajput Radio button • A Radio button represents a round shaped button such that only one can be selected from a panel. Radio button can be created using CheckboxGroup class and Checkbox classes. – To create a radio button: CheckboxGroup cbg = new CheckboxGroup (); – Checkbox cb = new Checkbox ("label", cbg, true); – To know the selected checkbox: Checkbox cb = cbg.getSelectedCheckbox (); – To know the selected checkbox label: String label = cbg.getSelectedCheckbox ().getLabel (); Mr. Vishal Rajput Choice Menu: • Choice menu is a popdown list of items. Only one item can be selected. – To create a choice menu: Choice ch = new Choice(); – To add items to the choice menu: ch.add ("text"); – To know the name of the item selected from the choice menu: • String s = ch.getSelectedItem (); • To know the index of the currently selected item: int i = ch.getSelectedIndex(); – This method returns -1, if nothing is selected. Mr. Vishal Rajput List box • A List box is similar to a choice box, it allows the user to select multiple items. – To create a list box: List lst = new List(); (or) – List lst = new List (3, true); • This list box initially displays 3 items. The next parameter true represents that the user can select • more than one item from the available items. If it is false, then the user can select only one item. – To add items to the list box: lst.add("text"); – To get the selected items: String x[] = lst.getSelectedItems(); – To get the selected indexes: int x[] = lst.getSelectedIndexes (); Mr. Vishal Rajput • Label: A label is a constant text that is displayed with a text. – To create a label: Label l = new Label("text",alignmentConstant); – Note: - alignmentconstant: Label.RIGHT, Label.LEFT and Label.CENTER • TextField: TextField allows a user to enter a single line of text. – To create a TextField: TextField tf = new TextField(25); (or) – – – – TextField tf = new TextField ("defaulttext", 25); To get the text from a TextField: String s = tf.getText(); To set the text into a TextField: tf.setText("text"); To hide the text being typed into the TextField by a character: tf.setEchoChar('char'); • TextArea: TextArea is similar to a TextField, but it accepts more than one line of text. – To create a TextArea: TextArea ta = new TextArea(); (or) – TextArea ta = new TextArea (rows, cols); – Note: TextArea supports getText () and setText () Mr. Vishal Rajput Scrollbar • Scrollbar class is useful to create scrollbars that can be attached to a frame or text area. Scrollbars can be arranged vertically or horizontally. – To create a scrollbar : Scrollbar sb = new Scrollbar (alignment, start, step, min, max); – alignment: Scrollbar.VERTICAL, Scrollbar.HORIZONTAL • • • • start: starting value (e.g. 0) step: step value (e.g. 30) // represents scrollbar length min: minimum value (e.g. 0) max: maximum value (e.g. 300) – To know the location of a scrollbar: int n = sb.getValue (); – To update scrollbar position to a new position: sb.setValue (int position); – To get the maximum value of the scrollbar: int x = sb.getMaximum (); – To get the minimum value of the scrollbar: int x = sb.getMinimum (); – To get the alignment of the scrollbar: int x = getOrientation (); • This method return 0 if the scrollbar is aligned HORIZONTAL, 1 if aligned VERTICAL. Mr. Vishal Rajput Container • Panel • Frame Mr. Vishal Rajput FRAME WINDOW • A window represents a box shaped area on the screen. Window does not have border and title. • A Frame is a top level window that is not contained in another window. A Frame contains border and title. • Frame encapsulates what is commonly thought of as a “window.” It is a subclass of Window and 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 they see was started by an applet and not by software running on their computer When a Frame window is created by a stand-alone application rather than an applet, a normal window is created. Toolkitclass has been used to get the image and then the image is used to display as frame icon. Toolkit class is used to bind the various components to particular native toolkit implementations. getDefaultToolkit(): //This method returns the default toolkit. getImage(url or filename): //This method retrieves the pixels data of the image which can be either in format of .gif, .jpegor .png. • Mr. Vishal Rajput Creating the Frame: • We can create a Frame by creating Frame class object. Frame obj = new Frame (); (or) • Create a class that extends Frame class then create an object to that class. class MyClass extends Frame MyClass obj = new MyClass (); • After creating the Frame we need to set Frame width and height using setSize () method as: f.setSize (400, 350); • We can display the frame using setVisible () method as: f.setVisible (true); Mr. Vishal Rajput //Write a program to create a Frame without extending Frame class import java.awt.*; class MyFrame { public static void main(String args[]) { Frame f1 = new Frame (); f1.setSize (500,150); f1.setTitle ("GUI World"); f1.setVisible (true); } } Mr. Vishal Rajput //With extending Frame Class import java.awt.*; class MyFrame extends Frame { public static void main(String args[]) { MyFrame f1 = new MyFrame (); f1.setSize (500,200); f1.setTitle ("GUI World"); f1.setVisible (true); } } • The frame can be minimized, maximized and resized but cannot be closed. Even if we click on close button of the frame, it will not perform any closing action. Closing a frame means attaching action to the component. To attach actions to the components, we need ‘Event Delegation Model’. Mr. Vishal Rajput Menus • We can also develop an application with a Menu.As a name indicates a Menu consists of Menu objects. These Menu objects comprise of MenuItem objects which can be selected by the user with a click of a mouse. A MenuItem may be a String, checkbox, separator, menu etc. • Following are the steps to to add menus to any Frame: 1. You need to create a MenuBar first with the help of the following method. – MenuBar mb = new MenuBar(); 2. Then you need to create a Menu using Menu m = new Menu("File");. 3. Now theMenuItem options can be added to the Menu from top to bottom, using the following methods. mi.add(new MenuItem("Open")); mi.add(new CheckboxMenuItem("Type here")); 4. Now you can add the Menu to the MenuBar from left to right using mi.add(m);. 5. Finally, you need to add the MenuBar to the Frame by calling the setMenuBar() method. Mr. Vishal Rajput import java.awt.*; import java.awt.event.*; class AWTMenu extends Frame { MenuBar mbar; Menu menu,submenu; MenuItem m1,m2,m3,m4,m5; public AWTMenu() { // Set frame properties setTitle("AWT Menu"); // Set the title setSize(400,400); // Set size to the frame setLayout(new FlowLayout()); // Set the layout setVisible(true); // Make the frame visible //setLocationRelativeTo(null); // Center the frame // Create the menu bar mbar=new MenuBar(); // Create the menu menu=new Menu("Menu"); // Create the submenu submenu=new Menu("Sub Menu"); // Create MenuItems m1=new MenuItem("Menu Item 1"); m2=new MenuItem("Menu Item 2"); m3=new MenuItem("Menu Item 3"); m4=new MenuItem("Menu Item 4"); m5=new MenuItem("Menu Item 5"); // Attach menu items to menu menu.add(m1); menu.add(m2); menu.add(m3); // Attach menu items to submenu submenu.add(m4); submenu.add(m5); // Attach submenu to menu menu.add(submenu); Mr. Vishal Rajput // Attach menu to menu bar mbar.add(menu); // Set menu bar to the frame setMenuBar(mbar); } public static void main(String args[]) { new AWTMenu(); AWTMenu mo=new AWTMenu(); mo.addWindowListener (new MyClass ()); } } class MyClass extends WindowAdapter { public void windowClosing (WindowEvent e) { System.exit (0); } } Mr. Vishal Rajput Generic Types • Generic type represents classes, interfaces and methods in a type safe manner. • Generic types can act on any type of data. • All Generic types are subclasses of Object class, it acts on Objects only. • Generic types act on advanced data type only. • It is not possible to create an object to Generic type itself. • Using generic types, we can avoid casting in many cases. Mr. Vishal Rajput Generic Class When we create a class with an instance variable to store an Integer object, it can be used to store Integer type data only. We cannot use that instance variable to store a Float class object or a String type Object. To store different types of data into a class, we have to write the same class again and again by changing the data type of the variables. This can be avoided using a generic class. A generic class represents a class that is type-safe. This means a generic class can act upon any data type. Mr. Vishal Rajput //Example for Generic Class class MyClass<T> { T obj; MyClass (T obj) { this.obj = obj; } T getObj () { return obj; } } class Gen1 { public static void main(String args[]) { Integer i1 = new Integer (10); MyClass<Integer> obj1 = new MyClass<Integer>(i1); System.out.println ("U stored : " + obj1.getObj() ); Double d1 = new Double(30.66); MyClass<Double> obj2 = new MyClass<Double>(d1); System.out.println ("U Stored : " + obj2.getObj() ); MyClass<String> obj3 = new MyClass<String>("Suresh Kumar"); System.out.println ("U Stored : " + obj3.getObj() ); } } Mr. Vishal Rajput Generic Method We can make a method alone as generic method by writing the generic parameter before the method return type as: <T> returntype methodname () { Method code; } e.g.: <T> void display_data () { Method body; } Mr. Vishal Rajput class MyClass { <T>void display_data (T arr[]) { for (int i=0;i<arr.length; i++) System.out.print ("\t" + arr[i]); System.out.println (); } } class Gen12 { public static void main(String args[]) { MyClass obj = new MyClass ( ); Integer a[] = {1,2,3,4,5,6}; System.out.print ("Reading Integer Objects: "); obj.display_data (a); Float b[] = {1.1f,2.2f,3.4f}; System.out.print ("Reading Float Objects: "); obj.display_data (b); String c[] = {"Subash","Chandra","Bose"}; System.out.print ("Reading String Objects: "); obj.display_data (c); } } Mr. Vishal Rajput Generic Interface It is possible to develop an interface using generic type concept. The general form of generic interface looks like: interface interface_name <T> { //method that accepts any object return_type method_name ( T object_name ); } Here, T represents any data type which is used in the interface. We can write an implementation class for the above interface as: class class_name <T> implements interface_name <T> { public return_type method_name ( T object_name ) { //provide body of the method } } Mr. Vishal Rajput //A generic interface interface inter<T> { void displayData (T obj); } class AnyClass<T> implements inter<T> { public void displayData (T t1) { System.out.println ("Entered value is : " + t1); } } class Gen123 { public static void main (String args[]) { AnyClass<Integer> ob1 = new AnyClass<Integer>(); ob1.displayData (new Integer (10) ); AnyClass<String> ob2 = new AnyClass<String>(); ob2.displayData (new String ("Conal Beaty") ); } } Mr. Vishal Rajput Collection Framework or Container Class • In order to handle group of objects we can use array of objects. If we have a class called Employ with members name and id, if we want to store details of 10 Employees, create an array of object to hold 10 Employ details. • Employ ob [] = new Employ [10]; • We cannot store different class objects into same array. • Inserting element at the end of array is easy but at the middle is difficult. • After retrieving the elements from the array, in order to process the elements we don’t have any methods Mr. Vishal Rajput Collection Object/Container Class • A collection object is an object which can store group of other objects. • A collection object has a class called Collection class or Container class. • All the collection classes are available in the package called 'java.util’ (util stands for utility). • Group of collection classes is called a Collection Framework. • A collection object does not store the physical copies of other objects; it stores references of other objects. • All the collection classes in java.util package are the implementation classes of different interfaces. Mr. Vishal Rajput • Set: A Set represents a group of elements (objects) arranged just like an array. The set will grow dynamically when the elements are stored into it. A set will not allow duplicate elements. • List: Lists are like sets but allow duplicate values to be stored. • Queue: A Queue represents arrangement of elements in FIFO (First In First Out) order. This means that an element that is stored as a first element into the queue will be removed first from the queue. • Map: Maps store elements in the form of key value pairs. If the key is provided its corresponding value can be obtained. Mr. Vishal Rajput • Retrieving Elements from Collections: Following are the ways to retrieve any element from a collection object: – Using Iterator interface. – Using ListIterator interface. – Using Enumeration interface. Mr. Vishal Rajput • Iterator Interface: Iterator is an interface that contains methods to retrieve the elements one by one from a collection object. It retrieves elements only in forward direction. It has 3 methods: Mr. Vishal Rajput • ListIterator Interface: ListIterator is an interface that contains methods to retrieve the elements from a collection object, both in forward and reverse directions. It can retrieve the elements in forward and backward direction. It has the following important methods: Mr. Vishal Rajput • Enumeration Interface: This interface is useful to retrieve elements one by one like Iterator. It has 2 methods. Mr. Vishal Rajput • HashSet Class: HashSet represents a set of elements (objects). It does not guarantee the order of elements. Also it does not allow the duplicate elements to be stored. – We can write the HashSet class as: class HashSet<T> – We can create the object as: HashSet<String> hs = new HashSet<String> (); • The following constructors are available in HashSet: – HashSet(); – HashSet (int capacity); Here capacity represents how many elements can be stored into the HashSet initially. This capacity may increase automatically when more number of elements is being stored. Mr. Vishal Rajput Mr. Vishal Rajput //HashSet Demo import java.util.*; class HS { public static void main(String args[]) { //create a HashSet to store Strings HashSet <String> hs = new HashSet<String> (); //Store some String elements hs.add ("India"); hs.add ("America"); hs.add ("Japan"); hs.add ("China"); hs.add ("America"); //view the HashSet System.out.println ("HashSet = " + hs); //add an Iterator to hs Iterator it = hs.iterator (); //display element by element using Iterator System.out.println ("Elements Using Iterator: "); while (it.hasNext() ) { String s = (String) it.next (); System.out.println(s); } } } Mr. Vishal Rajput LinkedHashSet Class: This is a subclass of HashSet class. LinkedHashSet internally uses a linked list to store the elements. It is a generic class that has the declaration: class LinkedHashSet<T> Mr. Vishal Rajput Stack Class • A stack represents a group of elements stored in LIFO (Last In First Out) order. This means that the element which is stored as a last element into the stack will be the first element to be removed from the stack. Inserting the elements (Objects) into the stack is called push operation and removing the elements from stack is called pop operation. Searching for an element in stack is called peep operation. Insertion and deletion of elements take place only from one side of the stack, called top of the stack. We can write a Stack class as: • class Stack<E> • e.g.: Stack<Integer> obj = new Stack<Integer> (); Mr. Vishal Rajput Mr. Vishal Rajput //pushing, popping, searching elements in a stack import java.util.*; class StackDemo { public static void main(String args[]) { //create an empty stack to contain Integer objects Stack<Integer> st = new Stack<Integer>(); st.push (new Integer(10) ); st.push (new Integer(20) ); st.push (new Integer(30) ); st.push (new Integer(40) ); st.push (new Integer(50) ); System.out.println (st); System.out.println ("Element at top of the stack is : " + st.peek() ); System.out.println ("Removing element at the TOP of the stack : " + st.pop()); System.out.println ("The new stack is : " + st); } } Mr. Vishal Rajput LinkedList Class • A linked list contains a group of elements in the form of nodes. Each node will have three fieldsthe data field contatins data and the link fields contain references to previous and next nodes.A linked list is written in the form of: • class LinkedList<E> • we can create an empty linked list for storing String type elements (objects) as: LinkedList <String> ll = new LinkedList<String> (); Mr. Vishal Rajput Mr. Vishal Rajput import java.util.*; //Linked List class LinkedDemo { public static void main(String args[]) { LinkedList <String> ll = new LinkedList<String>(); ll.add ("India"); ll.add ("Pakistan"); ll.add ("South America"); ll.add ("Africa"); ll.addFirst ("Europe"); ll.add (1,"Australia"); ll.add (2,"Antarctica"); System.out.println ("Elements in Linked List is : " + ll); System.out.println ("Size of the Linked List is : " + ll.size() ); } } Mr. Vishal Rajput ArrayList Class • An ArrayList is like an array, which can grow in memory dynamically. ArrayList is not synchronized. This means that when more than one thread acts simultaneously on the ArrayList object, the results may be incorrect in some cases. ArrayList class can be written as: • class ArrayList <E> • We can create an object to ArrayList as: ArrayList <String> arl = new ArrayList<String> (); Mr. Vishal Rajput Mr. Vishal Rajput import java.util.*; //ArrayList Demo class ArrayListDemo { public static void main(String args[]) { ArrayList <String> al = new ArrayList<String>(); al.add ("Asia"); al.add ("North America"); al.add ("South America"); al.add ("Africa"); al.add ("Europe"); al.add (1,"Australia"); al.add (2,"Antarctica"); System.out.print ("Size of the Array List is: " + al.size ()); System.out.print ("\nRetrieving elements in ArrayList using Iterator :"); Iterator it = al.iterator (); while (it.hasNext () ) System.out.print (it.next () + "\t"); } } Mr. Vishal Rajput HashMap Class • HashMap is a collection that stores elements in the form of key-value pairs. If key is provided its corresponding value can be easily retrieved from the HAshMap. Keys should be unique. HashMap is not synchronized and hence while using multiple threads on HashMap object, we get unreliable results. • We can write HashMap class as: class HashMap<K, V> • For example to store a String as key and an integer object as its value, we can create the HashMap as: HashMap<String, Integer> hm = new HashMap<String, Integer> (); • The default initial capacity of this HashMap will be taken as 16 and the load factor as 0.75. Load factor represents at what level the HashMap capacity should be doubled. For example, the product of capacity and load factor = 16 * 0.75 = 12. This represents that after storing 12th keyvalue pair into the HashMap, its capacity will become 32. Mr. Vishal Rajput Mr. Vishal Rajput import java.util.*; class HashMapDemo { public static void main(String args[]) { HashMap<Integer, String> hm = new HashMap<Integer, String> (); hm.put (new Integer (101),"Naresh"); hm.put (new Integer (102),"Rajesh"); hm.put (new Integer (103),"Suresh"); hm.put (new Integer (104),"Mahesh"); hm.put (new Integer (105),"Ramesh"); Set<Integer> set = new HashSet<Integer>(); set = hm.keySet(); System.out.println (set); } } Mr. Vishal Rajput Hashtable Class • Hashtable is a collection that stores elements in the form of keyvalue pairs. If key is provided later its corresponding value can be easily retrieved from the HAshtable. Keys should be unique. We can write Hashtable class as: class Hashtable<K,V> • For example to store a String as key and an integer object as its value, we can create the Hashtable as: Hashtable<String, Integer> ht = new Hashtable<String, Integer> (); • The default initial capacity of this Hashtable will be taken as 11 and the load factor as 0.75. Load factor represents at what level the Hashtable capacity should be doubled. For example, the product of capacity and load factor = 11 * 0.75 = 8.25. This represents that after storing 8th keyvalue pair into the Hashtable, its capacity will become 22. Mr. Vishal Rajput Mr. Vishal Rajput //Hashtable Demo import java.util.*; class HashtableDemo { public static void main(String args[]) { Hashtable<Integer, String> ht = new Hashtable<Integer, String> (); ht.put (new Integer (101),"Naresh"); ht.put (new Integer (102),"Rajesh"); ht.put (new Integer (103),“Conal"); ht.put (new Integer (104),“Rohit"); ht.put (new Integer (105),“Nilay"); Enumeration e = ht.keys (); while ( e.hasMoreElements () ) { Integer i1 = (Integer) e.nextElement (); System.out.println (i1 + "\t" + ht.get (i1)); } } } Mr. Vishal Rajput Swing and MVC • About Swing Swing components comprises of a large percentage of the JFC release. The swing component toolkit consists of over 250 pure java classes and 75 interfaces contained in about 10 packages. They are used to build lightweight user interface. Swing consists of user interface(UI) classes and non user interface classes. The non-UI classes provide services and other operations for the UI classes. Mr. Vishal Rajput Features of Swing Component • MVC Architecture: The user can provide his own data model for a component by sub-classing the Model class or by implementing the appropriate interface. The Model-View-Controller (MVC) architecture is used continually throughout the swing component set. The view and controller parts of the architecture are combined in the component. -MVC structure is split into three separate sections. Model - Contains the data for your program, along with the logic, methods and functions to manipulate this data. View - Means of displaying the data within the model. Probably a GUI, but could be audio, printouts or any kind of thing. Controller - Maps the users actions in the view to model updates • Action Objects: action interface objects provide a single point of control for program actions. An example of this would be a toolbar icon and a menu item referencing the same Action objects. When action object disabled, the GUI items that reference it are automatically disabled. Mr. Vishal Rajput • Pluggable look and feel: The user can select a look and feel and this can be plugged in. An interface made of Swing components can look like a Win32 app, a Motif app. It can use the new Metal look and feel. • Wide variety of components: Class names that starts with J are the components that are added to and application. For ex. JButton, JList, JPanel. Mr. Vishal Rajput JCOMPONENT • The JComponent class is the root of the visual component class hierarchy in the JFC. The visual components are known as the “J” classes. The functionality contained in the Jcomponent class is available to all the visual components contained in the JFC. The JComponent class is repository of functionality for all visual components. The JComponent class is at the top of the hierarchy of all visual components contained in the JFC. The hierarchy is shown in the following figure. Mr. Vishal Rajput Mr. Vishal Rajput • Creating a Frame: Create an object to JFrame: JFrame ob = new JFrame ("title"); (or) • Create a class as subclass to JFrame class: MyFrame extends JFrame Create an object to that class : MyFrame ob = new MyFrame (); Mr. Vishal Rajput Write a program to create a frame by creating an object to JFrame class. //A swing Frame import javax.swing.*; class MyFrame { public static void main (String agrs[]) { JFrame jf = new JFrame ("My Swing Frame..."); jf.setSize (400,200); jf.setVisible (true); jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); } } Mr. Vishal Rajput Note: To close the frame, we can take the help of getDefaultCloseOperation () method of JFrame class, as shown here: getDefaultCloseOperation (constant); where the constant can be any one of the following: · JFrame.EXIT_ON_CLOSE: This closes the application upon clicking on close button. · JFrame.DISPOSE_ON_CLOSE: This disposes the present frame which is visible on the screen. The JVM may also terminate. · JFrame.DO_NOTHING_ON_CLOSE: This will not perform any operation upon clicking on close button. · JFrame.HIDE_ON_CLOSE: This hides the frame upon clicking on close button. Mr. Vishal Rajput Window Panes • Window Panes: In swings the components are attached to the window panes only.A window pane represents a free area of a window where some text or components can be displayed. For example, we can create a frame using JFrame class in javax.swing which contains a free area inside it, this free area is called 'window pane'. Four types of window panes are available in javax.swing package. Mr. Vishal Rajput Mr. Vishal Rajput · Glass Pane: This is the first pane and is very close to the monitors screen. Any components to be displayed in the foreground are attached to this glass pane. To reach this glass pane, we use getGlassPane () method of JFrame class. · Root Pane: This pane is below the glass pane. Any components to be displayed in the background are displayed in this pane. Root pane and glass pane are used in animations also. For example, suppose we want to display a flying aeroplane in the sky. The airplane can be displayed as a .gif or .jpg file in the glass pane where as the blue sky can be displayed in the root pane in the background. To reach this root pane, we use getRootPane () method of JFrame class. · Layered Pane: This pane lies below the root pane. When we want to take several components as a group, we attach them in the layered pane. We can reach this pane by calling getLayeredPane () method of JFrame class. · Content Pane: This is the bottom most pane of all. Individual components are attached to this pane. To reach this pane, we can call getContentPane () method of JFrame class. Mr. Vishal Rajput Wrire a program to display text in the frame. import javax.swing.*; import java.awt.*; class MyPanel extends JPanel { public void paintComponent (Graphics g) { super.paintComponent (g); //call JPanel’s method setBackground (Color.red); g.setColor (Color.white); g.setFont (new Font("Courier New",Font.BOLD,30)); g.drawString ("Hello Readers!", 50, 100); } } class FrameDemo extends JFrame { FrameDemo () { Container c = getContentPane (); MyPanel mp = new MyPanel (); c.add (mp); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); } public static void main(String args[]) { FrameDemo ob = new FrameDemo (); ob.setSize (600, 200); ob.setVisible (true); } } Mr. Vishal Rajput