Copyright 2003 Mudra Services1 SWING - JTabbedPane Helps stack pages of information into a single point of reference If information cannot be laid out.

Slides:



Advertisements
Similar presentations
15 Copyright © 2005, Oracle. All rights reserved. Adding User Interface Components and Event Handling.
Advertisements

Introduction to Swing Components Chapter 14. Part of the Java Foundation Classes (JFC) Provides a rich set of GUI components Used to create a Java program.
Java Software Development Paradigm Lecture # 12. Basics of GUI.
CMSC 341 Building Java GUIs. 09/26/2007 CMSC 341 GUI 2 Why Java GUI Development? Course is about Data Structures, not GUIs. We are giving you the opportunity.
User Interface Design CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L.
 What are the basic GUI components we’ve learned so far? › JFrame › JPanel › JButton › JLabel › JTextArea › JTextField › JCheckBox › JRadioButton › Paint.
Understanding SWING Architecture CS 4170 UI Design Hrvoje Benko Oct. 9, 2001.
Graphical User Interfaces (GUIs) GUI: An application that uses graphical objects to interact with users GUI applications consist of: –Events: A user or.
Swing CS-328 Dick Steflik John Margulies. Swing vs AWT AWT is Java’s original set of classes for building GUIs Uses peer components of the OS; heavyweight.
THE SWING UI TOOLKIT Mostly from “The Swing Connection”The Swing Connection.
Object-Oriented Software Engineering Java with added Swing.
1 GUI Elements in Java Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Chapter 13: Advanced GUIs and Graphics J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition.
Scott Grissom, copyright 2006Ch 11: GUI Slide 1 Graphical User Interfaces (Ch 11) Careful design of a graphical user interface is key to a viable software.
Graphic User Interfaces Part 1. Typical GUI Screen from Microsoft Word What GUI “components” can you see? –Menus? Buttons? Labels? What else? –Anything.
PROGRAMMING REVIEW Lab 2 EECS 448 Dr Fengjun Li and Meenakshi Mishra.
CS3 - AWT/Swing1 The Abstract Windowing Toolkit Since Java was first released, its user interface facilities have been a significant weakness –The Abstract.
Introduction to Java GUI Creating Graphical User Interfaces © copyright Bobby Hoggard / material may not be redistributed without permission.
Java Programming Chapter 10 Graphical User Interfaces.
Chapter 13 Advanced GUIs and Graphics. Chapter Objectives Learn about applets Explore the class Graphics Learn about the class Font Explore the class.
Java Programming: From Problem Analysis to Program Design, 4e Chapter 12 Advanced GUIs and Graphics.
Applets and Frames CS 21a: Introduction to Computing I First Semester,
Introduction to GUI in Java 1. Graphical User Interface Java is equipped with many powerful,easy to use GUI component such as input and output dialog.
Object Oriented Programming Ders 11: Interfaces Mustafa Emre İlal
עקרונות תכנות מונחה עצמים תרגול 4 - GUI. Outline  Introduction to GUI  Swing  Basic components  Event handling.
Introduction to Swing Components Chapter 14.  Part of the Java Foundation Classes (JFC)  Provides a rich set of GUI components  Used to create a Java.
Swing, part 2 Tutorial 07 1 / 31 Leonid Barenboim 25/4/2010.
CSE 219 Patterns in Programming More Design Patterns.
Tables CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L.
GUIs in Java Swing, Events CS2110, SW Development Methods Readings: MSD, Chapter 12 Lab Exercise.
1 CSC111H Graphical User Interfaces (GUIs) Introduction GUIs in Java Understanding Events A Simple Application The Containment Hierarchy Layout Managers.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
Graphics and Event-Driven Programming in Java John C. Ramirez Department of Computer Science University of Pittsburgh.
CIS Intro to JAVA Lecture Notes Set June-05 GUI Programming – Assignment 5 Notes.
Java Programming: Advanced Topics 1 Components and Facilities for Rich Graphical User Interfaces Chapter 7.
1 Java Swing - Lecture 2 Components and Containment Boriana Koleva
CSE1030-HR GUI The Big Picture Building the View Building the Controller Separating the Concerns Going Further.
CSCI Swing1 The Abstract Windowing Toolkit Since Java was first released, its user interface facilities have been a significant weakness –The Abstract.
Applets and Frames. Copyright 2005, by the authors of these slides, and Ateneo de Manila University. All rights reserved L14: GUI Slide 2 Applets Usually.
JTree javax.swing.tree javax.swing.event. Components JTree and JTable COMPONENT – Model – Selection Model – Editor – Renderer.
1 / 67 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 14 Programming Fundamentals using Java 1.
Java GUI. Graphical User Interface (GUI) a list a button a text field a label combo box checkbox.
Introduction to GUI in 1 Graphical User Interface 2 Nouf Almunyif.
Swinging in Your Java Playground. Background Swing is a part of the Java Foundation Classes (JFC). The JFC is made up of features intended to give a programmer.
Swing - 2 Session 13. Swing - 2 / 2 of 38 Objectives (1) Discuss trees and tables Discuss progress bars Discuss MVC architecture Describe menus.
Swing. Introduction to Swing What is Swing? “ Swing is a diverse collection of lightweight components that can be used to build sophisticated user interfaces.”
5-Jan-16 R Ramesh Swing. 5-Jan-16 R Ramesh An Introduction to Java Foundation Classes (JFC) A suite of libraries to assist programmers create enterprise.
עקרונות תכנות מונחה עצמים תרגול 8: MVC. Outline  MVC  Using the default models  Example- File Browser.
Java Programming, Second Edition Chapter Thirteen Understanding Swing Components.
Sadegh Aliakbary Sharif University of Technology Fall 2011.
Lecture # 6 Graphical User Interface(GUI). Introduction A graphical user interface (GUI) presents a user- friendly mechanism for interacting with an application.
Swing GUI Components So far, we have written GUI applications which can ‘ draw ’. These applications are simple, yet typical of all Java GUI applications.
Graphical User Interface (GUI)
Notes for Assignment #2 Assn2: GUI Database Interface Corresponds with Chapters 28, 29, 31.
1 A Quick Java Swing Tutorial. 2 Introduction Swing – A set of GUI classes –Part of the Java's standard library –Much better than the previous library:
Chapter 6 Building Java GUIs. MVC Model View Controller The model passes its data to the view for rendering The view determines which events are passed.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter Chapter 7 ( Book Chapter 14) GUI and Event-Driven Programming.
Java Swing. Note - this presentation.. often needs to refer to source code which is too big to put on a slide So the source code is in a separate Word.
GUI 1: JFC and Swing Basics OOP tirgul No
A Quick Java Swing Tutorial
Java GUI.
Lecture 27 Creating Custom GUIs
A Quick Java Swing Tutorial
Chapter 13: Advanced GUIs and Graphics
עקרונות תכנות מונחה עצמים תרגול 8: MVC
Steps to Creating a GUI Interface
A Quick Java Swing Tutorial
Advanced Programming in Java
Advanced GUIs and Graphics
Graphical User Interface
Presentation transcript:

Copyright 2003 Mudra Services1 SWING - JTabbedPane Helps stack pages of information into a single point of reference If information cannot be laid out in one page, it can be split into multiple tabs Not available in AWT But somewhat similar to CardLayout A lot of text editors use it to show open files. Can work with multiple files simultaneously.

Copyright 2003 Mudra Services2 SWING - JTabbedPane Clicking on Name tab

Copyright 2003 Mudra Services3 SWING - JTabbedPane Clicking on Address tab

Copyright 2003 Mudra Services4 SWING - JTabbedPane Clicking on Other tab

Copyright 2003 Mudra Services5 SWING - JTabbedPane package tabbedexample; import java.awt.*; import javax.swing.*; public class TabbedExample extends JFrame { public TabbedExample() { // creation of the tabbed pane object JTabbedPane pane = new JTabbedPane(); // create the 3 panels JPanel panel1 = createPanel1(); JPanel panel2 = createPanel2(); JPanel panel3 = createPanel3();

Copyright 2003 Mudra Services6 SWING - JTabbedPane // add the panels to the pane pane.addTab("Name",panel1); pane.addTab("Address",panel2); pane.addTab("Other",panel3); pane.setSelectedComponent(panel1); // create button panel JPanel buttons = new JPanel(); buttons.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5)); buttons.add(new JButton("Submit")); // add the panel to top panel getContentPane().add(pane,BorderLayout.CENTER); getContentPane().add(buttons,BorderLayout.SOUTH); }

Copyright 2003 Mudra Services7 SWING - JTabbedPane // create panel 1 private JPanel createPanel1() { JPanel panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.CENTER)); panel.setBorder(BorderFactory.createEtchedBorder()); panel.add(new JLabel("Name: ")); panel.add(new JTextField(30)); return(panel); }

Copyright 2003 Mudra Services8 SWING - JTabbedPane // create panel 2 private JPanel createPanel2() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.setBorder(BorderFactory.createEtchedBorder()); panel.add("Center",new JTextArea()); return(panel); }

Copyright 2003 Mudra Services9 SWING - JTabbedPane // create panel 3 private JPanel createPanel3() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS)); panel.setBorder(BorderFactory.createEtchedBorder()); panel.add(new JCheckBox("Check if you are still in school")); panel.add(new JCheckBox("Check if you have no medical problems")); return(panel); }

Copyright 2003 Mudra Services10 SWING - JTabbedPane // create main program public static void main(String[] args) { TabbedExample tabbedExample = new TabbedExample(); tabbedExample.pack(); tabbedExample.setVisible(true); }

Copyright 2003 Mudra Services11 SWING - JTabbedPane Remove Tabs pane.removeTabAt(index) Selecting pages pane.setSelectedIndex(index) Adding images to tabs pane.addTab(“text”,icon,panel) Enabling/Disabling tab pane.setEnabledAt(2,false) Page selection changes can be detected by listening to ChangeEvents generated

Copyright 2003 Mudra Services12 SWING - JScrollPane Used when a panel is too big to be displayed on the screen A typical example is a text editor where only a part of the text is displayed at a time. Scrollbars are used to scroll the text. The developer is responsible for only populating the pane. SWING manages all the repainting, resizing activities associated with the pane

Copyright 2003 Mudra Services13 SWING - JScrollPane An image being scrolled

Copyright 2003 Mudra Services14 SWING - JScrollPane package scrollexample; import java.awt.*; import javax.swing.*; public class ScrollExample extends JFrame { public ScrollExample() { // set the size of the frame setSize(600,400); // create a JLabel component Icon image = new ImageIcon("cliff_ib.gif"); JLabel label = new JLabel(image);

Copyright 2003 Mudra Services15 SWING - JScrollPane // add the jlabel to the scroll pane JScrollPane pane = new JScrollPane(); pane.getViewport().add(label); // add the scroll pane to the frame getContentPane().add("Center",pane); } public static void main(String[] args) { ScrollExample scrollExample = new ScrollExample(); scrollExample.setVisible(true); }

Copyright 2003 Mudra Services16 SWING - JScrollPane Control scroll bars pane.setVerticalScrollBarPolicy( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); pane.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); Control the size of scroll bars // changing the size of the scroll bars JScrollBar vBar = pane.getVerticalScrollBar(); Dimension dim = vBar.getSize(); dim.width = 5; vBar.setPreferredSize(dim);

Copyright 2003 Mudra Services17 SWING - JScrollPane Unit Increment Block Increment The increment size can be changed from the default by using the Scrollable interface. Scrollable interface Dimension getPreferredScrollableViewportSize() int getScrollableBlockIncrement() int getScrollableUnitIncrement() boolean getScrollableTracksViewportWidth() boolean getScrollableTracksViewportHeight()

Copyright 2003 Mudra Services18 SWING - JScrollPane class ScrollableImage extends JLabel implements Scrollable { public ScrollableImage(Icon icon) { super(icon); } public Dimension getPreferredScrollableViewportSize() { return(new Dimension(300,300)); } public int getScrollableBlockIncrement(Rectangle visibleRect,int orientation,int direction) { return(20); }

Copyright 2003 Mudra Services19 SWING - JScrollPane public int getScrollableUnitIncrement(Rectangle visibleRect,int orientation,int direction) { return(20); } public boolean getScrollableTracksViewportWidth() { return(false); } public boolean getScrollableTracksViewportHeight() { return(false); }

Copyright 2003 Mudra Services20 SWING - JSplitPane View two or more pieces of information simultaneously Resize any panel to view more or less data Orientation left-to-right top-to-bottom Text editors usually have split windows to create multiple copies of the same text file. This allows you to look at different parts of the text document at the same time.

Copyright 2003 Mudra Services21 SWING - JSplitPane A window split into two panels Vertical Split

Copyright 2003 Mudra Services22 SWING - JSplitPane package splitexample; import java.awt.*; import javax.swing.*; public class SplitExample extends JFrame { public SplitExample() { // create a split pane JSplitPane splitpane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); // create the panels JPanel panel1 = createPanel1(); JPanel panel2 = createPanel2();

Copyright 2003 Mudra Services23 SWING - JSplitPane // add to the split pane splitpane.setTopComponent(panel1); splitpane.setBottomComponent(panel2); // add splitpane to the frame getContentPane().add(splitpane); } public static void main(String[] args) { SplitExample splitExample = new SplitExample(); splitExample.pack(); splitExample.setVisible(true); }

Copyright 2003 Mudra Services24 SWING - JSplitPane // create panel 1 private JPanel createPanel1() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.setBorder(BorderFactory.createEtchedBorder()); panel.add("Center",new JTextArea(5,30)); return(panel); }

Copyright 2003 Mudra Services25 SWING - JSplitPane // create panel 2 private JPanel createPanel2() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS)); panel.setBorder(BorderFactory.createEtchedBorder()); panel.add(new JCheckBox("Check if you are still in school")); panel.add(new JCheckBox("Check if you have no medical problems")); return(panel); } } // end

Copyright 2003 Mudra Services26 SWING - JSplitPane One split pane can be nested into another split pane for a more complex interface Setting the divider size splitpane.setDividerSize(20) A divider movement can be detected by using the AncestorListener Components of the split pane can implement it

Copyright 2003 Mudra Services27 SWING - JEditorPane Extends from the JTextComponent class Ability to display any mime type Can easily create an HTML viewer for online help Add internet capability to the application

Copyright 2003 Mudra Services28 SWING - JEditorPane package editorpaneexample; import java.awt.*; import javax.swing.*; import javax.swing.event.*; import java.net.*; public class EditorPaneExample extends JFrame implements HyperlinkListener { private JEditorPane editorpane; public EditorPaneExample() { try { setSize(600,600);

Copyright 2003 Mudra Services29 SWING - JEditorPane // create an editor pane pointing to a URL URL url = new URL("file:///D:/OLDui/index.html"); editorpane = new JEditorPane(url); editorpane.setEditable(false); editorpane.addHyperlinkListener(this); // wrap the editor pane in a scroll pane JScrollPane scrollpane = new JScrollPane(); scrollpane.getViewport().add(editorpane,BorderLayout.CENTER); // add the pane to the frame getContentPane().add(scrollpane,BorderLayout.CENTER); } catch (Exception exp) { System.out.println(exp.getMessage()); } }

Copyright 2003 Mudra Services30 SWING - JEditorPane public void hyperlinkUpdate(HyperlinkEvent event) { if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { // User clicked on a URL try { editorpane.setPage(event.getURL()); } catch (Exception exp) { System.out.println("Error :: " + exp.getMessage()); }

Copyright 2003 Mudra Services31 SWING - JEditorPane public static void main(String[] args) { EditorPaneExample editorPaneExample = new EditorPaneExample(); editorPaneExample.setVisible(true); } Swing handles RTF other than HTML Custom formats can be handled by setting up custom editor kits

Copyright 2003 Mudra Services32 SWING - Action Synchronizing the action listeners for toolbars buttons, menu items and popup menu items is a nightmare Synchronizing enabling/disabling is a problem Actions are the solution to avoid synchronization and foster code reuse An action object can be added to a toolbar, menu or a popup menu Action object can be disabled/enabled

Copyright 2003 Mudra Services33 SWING - Action Action class should extend from AbstractAction public class XAction extends AbstractAction { public XAction(String name,ImageIcon image) { super(name,image); } public void actionPerformed(ActionEvent event) { // Handle action event for X here }

Copyright 2003 Mudra Services34 SWING - Action Shows the disabled actions

Copyright 2003 Mudra Services35 SWING - Action package actionexample; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ActionExample extends JFrame { private JPopupMenu popup = new JPopupMenu(); // Handle right clicks public class MouseHandler extends MouseAdapter { public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) { popup.show(e.getComponent(),e.getX(),e.getY()); }

Copyright 2003 Mudra Services36 SWING - Action // Action class for 'New' class NewAction extends AbstractAction { NewAction(String name,ImageIcon icon) { super(name,icon); } public void actionPerformed(ActionEvent e) { // handle new action }

Copyright 2003 Mudra Services37 SWING - Action // Action class for 'Save' class SaveAction extends AbstractAction { SaveAction(String name,ImageIcon icon) { super(name,icon); } public void actionPerformed(ActionEvent e) { // handle save action }

Copyright 2003 Mudra Services38 SWING - Action // Action class for 'SaveAll' class SaveAllAction extends AbstractAction { SaveAllAction(String name,ImageIcon icon) { super(name,icon); } public void actionPerformed(ActionEvent e) { // handle saveAll action }

Copyright 2003 Mudra Services39 SWING - Action public ActionExample() { setSize(300,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Action newAction = new NewAction("Open",new ImageIcon("open.gif")); Action saveAction = new SaveAction("Save",new ImageIcon("save.gif")); Action saveallAction = new SaveAllAction("Save All",new ImageIcon("saveall.gif")); // create a menu bar and file menu JMenuBar menubar = new JMenuBar(); JMenu fileMenu = new JMenu("File");

Copyright 2003 Mudra Services40 SWING - Action fileMenu.add(newAction); fileMenu.add(saveAction); fileMenu.add(saveallAction); menubar.add(fileMenu); setJMenuBar(menubar); // create a tool bar JToolBar tool = new JToolBar(); tool.add(newAction); tool.add(saveAction); tool.add(saveallAction); getContentPane().add("North",tool); Add actions to Menu bar Add actions to Tool bar

Copyright 2003 Mudra Services41 SWING - Action // add to popup menu popup.add(newAction); popup.add(saveAction); popup.add(saveallAction); // disable saveall action and save action saveAction.setEnabled(false); saveallAction.setEnabled(false); getContentPane().add("Center",new JPanel()); getContentPane().addMouseListener(new MouseHandler()); } Add actions to Popup menu item

Copyright 2003 Mudra Services42 SWING - Action public static void main(String[] args) { ActionExample actionExample = new ActionExample(); // pack and show actionExample.setVisible(true); }

Copyright 2003 Mudra Services43 SWING - JDialog Secondary application window Almost like a JFrame But supports modal operation. Extends from the Dialog class in AWT

Copyright 2003 Mudra Services44 SWING - JDialog A JDialog window

Copyright 2003 Mudra Services45 SWING - JDialog package dialogexample; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DialogExample extends JFrame implements ActionListener { public DialogExample() { // exit the frame on close this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // create a JButton and add it to the content pane JButton jbutton = new JButton("Open Dialog"); jbutton.addActionListener(this); getContentPane().add(jbutton); }

Copyright 2003 Mudra Services46 SWING - JDialog public void actionPerformed(ActionEvent e) { // when the button is clicked, control comes here TestDialog dialog = new TestDialog(this,"Test Dialog",true); dialog.pack(); dialog.setVisible(true); } public static void main(String[] args) { DialogExample dialogExample = new DialogExample(); dialogExample.pack(); dialogExample.setVisible(true); }

Copyright 2003 Mudra Services47 SWING - JDialog package dialogexample; import java.awt.*; import javax.swing.*; public class TestDialog extends JDialog { public TestDialog(Frame frame, String title, boolean modal) { super(frame, title, modal); // dispose the dialog on close this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); // create a button panel JPanel buttons = new JPanel();

Copyright 2003 Mudra Services48 SWING - JDialog buttons.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5)); buttons.add(new JButton("Close")); // add the buttons JPanel areaPanel = new JPanel(); JTextArea area = new JTextArea(5,40); areaPanel.add(area); areaPanel.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(5,5,5,5))); getContentPane().add("Center",areaPanel); getContentPane().add("South",buttons); }

Copyright 2003 Mudra Services49 SWING - JOptionPane Simplifies the task of displaying quick information to the user Messages can be in the form of Error Message Information message Warning message Question message Plain message Can show confirm dialog

Copyright 2003 Mudra Services50 SWING - JOptionPane JOptionPane option = new JOptionPane(); option.showMessageDialog(this,"This is an Error","Error",JOptionPane.ERROR_MESSAGE);

Copyright 2003 Mudra Services51 SWING - JOptionPane JOptionPane option = new JOptionPane(); option.showMessageDialog(this,"This is an Warning","Warning",JOptionPane.WARNING_MESSAGE);

Copyright 2003 Mudra Services52 SWING - JOptionPane JOptionPane option = new JOptionPane(); int uoption = option.showConfirmDialog(this,"Is this a Question?","Question",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null); if (uoption == JOptionPane.YES_OPTION) { …………….}

Copyright 2003 Mudra Services53 SWING - JColorChooser Platform independent way of choosing color Simplifies the user interface for color selection Can be Used as an independent dialog for choosing a color Embedded in a frame which contains other panel

Copyright 2003 Mudra Services54 SWING - JColorChooser Color color = JColorChooser.showDialog(this,"Choose a Color",Color.blue); // Act on the color chosen by the user

Copyright 2003 Mudra Services55 SWING - JFileChooser Platform independent way of providing a file selection mechanism Allows filtering of files JFileChooser chooser = new JFileChooser(); int value = chooser.showOpenDialog(this); if (value == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); // handle file selection }

Copyright 2003 Mudra Services56 SWING - JFileChooser A file chooser

Copyright 2003 Mudra Services57 SWING - JInternalFrame Allows the capability to embed frames within frames The internal frames can move within the bounds of the parent frame Can be maximized,minimized or restored Also called the MDI (multiple document interface)

Copyright 2003 Mudra Services58 SWING - JInternalFrame

Copyright 2003 Mudra Services59 SWING - JInternalFrame package internalexample; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class InternalExample extends JFrame implements ActionListener { private JDesktopPane deskPane; public InternalExample() { setSize(500,500); // create a tool bar JToolBar toolbar = new JToolBar(); JButton newButton = new JButton("Create"); newButton.addActionListener(this); toolbar.add(newButton);

Copyright 2003 Mudra Services60 SWING - JInternalFrame // create a desktop pane deskPane = new JDesktopPane(); getContentPane().add("Center",deskPane); getContentPane().add("North",toolbar); } public void actionPerformed(ActionEvent e) { TestInternalFrame frame = new TestInternalFrame(); frame.setVisible(true); deskPane.add(frame); }

Copyright 2003 Mudra Services61 SWING - JInternalFrame public static void main(String[] args) { InternalExample internalExample = new InternalExample(); internalExample.setVisible(true); } } // end Internal Example

Copyright 2003 Mudra Services62 SWING - JInternalFrame package internalexample; import java.awt.*; import javax.swing.*; public class TestInternalFrame extends JInternalFrame { public TestInternalFrame() { super("Internal Frame"); // set the frame properties setClosable(true); setMaximizable(true); setIconifiable(true); setResizable(true);

Copyright 2003 Mudra Services63 SWING - JInternalFrame // set the size and add test area setSize(400,400); getContentPane().add("Center",new JTextArea()); } } // end TestInternalFrame Other methods moveToFront() moveToBack() setMenuBar(JMenuBar menubar) addInternalFrameListener(InternalFrameListener listener)

Copyright 2003 Mudra Services64 SWING – Exercise 3

Copyright 2003 Mudra Services65 SWING – Exercise Create a UI layout as shown in the previous page. When the frame is first shown the label at the bottom should say “File not selected”. When the user clicks on button and chooses a file or directory, the label text should change to the full absolute path of the file. When the window is closed, the application should exit.

Copyright 2003 Mudra Services66 SWING - JList Collection of items from which user can make one or more selection Has the ability to provide graphics inside the list

Copyright 2003 Mudra Services67 SWING - JList Jlist accepts String[], Vector or ListModel String[] items = new String[] { "item1","item2","item3","item4","item5","item6","item7","item8","item9","item10" }; JList list = new JList(items); list.setVisibleRowCount(5); getContentPane().add("Center",new JScrollPane(list));

Copyright 2003 Mudra Services68 SWING - JList // A Custom List Model class TestModel extends AbstractListModel { public int getSize() { return(10); } public Object getElementAt(int index) { return "item" + index; }

Copyright 2003 Mudra Services69 SWING - JList

Copyright 2003 Mudra Services70 SWING - JList package listexample; import java.awt.*; import javax.swing.*; public class ListExample extends JFrame { private String[] items = {"Open","Save","SaveAll","Zoom","Zoomin","Zoomout"}; private String[] images = {"open.gif","save.gif","saveall.gif","zoom.gif","zoomin.gif","zoomout.gif"};

Copyright 2003 Mudra Services71 SWING - JList // Custom model class TestModel extends AbstractListModel { public int getSize() { return(items.length); } public Object getElementAt(int index) { return(items[index]); } } // end TestModel

Copyright 2003 Mudra Services72 SWING - JList // Custom cell renderer class CustomCellRenderer extends JLabel implements ListCellRenderer { public CustomCellRenderer() { setOpaque(true); } public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus) { this.setText(value.toString()); this.setIcon(new ImageIcon(images[index])); if (isSelected) { this.setBackground(Color.blue); this.setForeground(Color.white); }

Copyright 2003 Mudra Services73 SWING - JList else { this.setBackground(Color.white); this.setForeground(Color.black); } return this; } } // end CustomCellRenderer public ListExample() { setSize(200,200); JList list = new JList(new TestModel()); list.setCellRenderer(new CustomCellRenderer()); getContentPane().add("Center",new JScrollPane(list)); }

Copyright 2003 Mudra Services74 SWING - JList public static void main(String[] args) { ListExample listExample = new ListExample(); listExample.setVisible(true); }

Copyright 2003 Mudra Services75 SWING - JList Listening to list activity addListSelectionListener ListSelectionEvent Any component can be rendered inside the list box. JButton JTextField JCheckBox etc

Copyright 2003 Mudra Services76 SWING - JTable Simple two dimensional display Supports custom data models Supports custom cell rendering Render any component inside the cell Support custom header rendering Highly flexible component Can be customized by the programmer Class is called JTable

Copyright 2003 Mudra Services77 SWING - JTable A JTable which shows information about people

Copyright 2003 Mudra Services78 SWING - JTable package simpletable; import java.awt.*; import javax.swing.*; public class SimpleTableExample extends JFrame { public SimpleTableExample() { setSize(600,300); // create the columns and the values String[] columns = {"Name","Telephone","City","Company"}; String values[][] = { {"Mr. X"," ","Herndon","Bell Atlantic"}, {"Mr. Z"," ","Rockville","Artesia Tech"}, {"Mr. W"," ","Herndon","Intersect Soft"}, {"Mr. A"," ","Herndon","Intelsat"} };

Copyright 2003 Mudra Services79 SWING - JTable JTable table = new JTable(values,columns); JScrollPane pane = new JScrollPane(table); // add the table to the frame getContentPane().add(pane); } public static void main(String[] args) { SimpleTableExample simpleTableExample = new SimpleTableExample(); simpleTableExample.setVisible(true); } } // end program

Copyright 2003 Mudra Services80 SWING - JTable JTable uses the DefaultDataModel class as the model by default A custom data model can be created for the table by extending AbstractTableModel

Copyright 2003 Mudra Services81 SWING - JTable Using a custom table model

Copyright 2003 Mudra Services82 SWING - JTable package simpletable; import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class SimpleTableExample extends JFrame { public SimpleTableExample() { // set the size of the frame setSize(600,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(new SimpleTableModel()); table.setShowHorizontalLines(false); JScrollPane pane = new JScrollPane(table); pane.getViewport().setBackground(Color.white); Set the table Background to white

Copyright 2003 Mudra Services83 SWING - JTable // add the table to the frame getContentPane().add(pane); } public static void main(String[] args) { SimpleTableExample simpleTableExample = new SimpleTableExample(); simpleTableExample.setVisible(true); }

Copyright 2003 Mudra Services84 SWING - JTable package simpletable; import javax.swing.table.*; class SimpleTableModel extends AbstractTableModel { // create the columns and the values private String[] columns = {"Name","Telephone","City","Company"}; private String values[][] = { {"Mr. X"," ","Herndon","Bell Atlantic"}, {"Mr. Z"," ","Rockville","Artesia Tech"}, {"Mr. W"," ","Herndon","Intersect Software"}, {"Mr. A"," ","Herndon","Intelsat"} };

Copyright 2003 Mudra Services85 SWING - JTable // Return object at (row,col) public Object getValueAt(int row,int col) { return(values[row][col]); } // Set object at (row,col) public void setValueAt(Object value,int row,int col) { // do nothing } // Return the column count public int getColumnCount() { return(columns.length); }

Copyright 2003 Mudra Services86 SWING - JTable // Return the row count public int getRowCount() { return(values.length); } // Return the column name at col public String getColumnName(int col) { return(columns[col]); } } // end model

Copyright 2003 Mudra Services87 SWING - JTable A JTable in which the second column is right justified with yellow background

Copyright 2003 Mudra Services88 SWING - JTable package simpletable; import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class TelephoneRenderer extends JLabel implements TableCellRenderer { public TelephoneRenderer() { setOpaque(true); }

Copyright 2003 Mudra Services89 SWING - JTable public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,boolean hasFocus,int row,int column) { this.setHorizontalAlignment(JLabel.RIGHT); this.setText((String)value); this.setBackground(Color.yellow); return(this); } } // end renderer Return the label

Copyright 2003 Mudra Services90 SWING - JTable Associating a cell renderer to a column TableColumn column = table.getColumn("Telephone"); column.setCellRenderer(new TelephoneRenderer()); Table header rendering can be achieved by column.setHeaderRenderer( )

Copyright 2003 Mudra Services91 SWING - JTable Table selection events can be observed by implementing the ListSelectionListener interface. ListSelectionEvent is generated whenever the selections change. table.getSelectionModel().addListSelectionListener(this);

Copyright 2003 Mudra Services92 SWING - JTable public void valueChanged(ListSelectionEvent event) { if (event.getSource() == table.getSelectionModel() && !event.getValueIsAdjusting()) { int row = table.getSelectedRow(); if (row >= 0) { SimpleTableModel model = (SimpleTableModel)table.getModel(); String name = (String)model.getValueAt(row,0); JOptionPane pane = new JOptionPane(); pane.showMessageDialog(this,"Selected : " + name); }

Copyright 2003 Mudra Services93 SWING - JTree Presents hierarchical information Entirely made up of nodes. Every node has a parent except for the root node. Supports custom models custom rendering Class is called JTree

Copyright 2003 Mudra Services94 SWING - JTree Uses the default tree model to create the tree

Copyright 2003 Mudra Services95 SWING - JTree package treeexample; import java.awt.*; import javax.swing.*; import javax.swing.tree.*; public class TreeExample extends JFrame { private JTree jtree; public TreeExample() { // set the size setSize(400,400); // root node DefaultMutableTreeNode filenode = new DefaultMutableTreeNode("TreeExample.java");

Copyright 2003 Mudra Services96 SWING - JTree // immediate children DefaultMutableTreeNode importnode = new DefaultMutableTreeNode("Imports"); DefaultMutableTreeNode datanode = new DefaultMutableTreeNode("Variables"); DefaultMutableTreeNode methodnode = new DefaultMutableTreeNode("Methods"); filenode.add(importnode); filenode.add(datanode); filenode.add(methodnode); // import children DefaultMutableTreeNode awt = new DefaultMutableTreeNode("java.awt.*");

Copyright 2003 Mudra Services97 SWING - JTree DefaultMutableTreeNode swing = new DefaultMutableTreeNode("javax.swing.*"); DefaultMutableTreeNode swingtree = new DefaultMutableTreeNode("javax.swing.tree.*"); importnode.add(awt); importnode.add(swing); importnode.add(swingtree); // data children DefaultMutableTreeNode variable = new DefaultMutableTreeNode("JTree jtree"); datanode.add(variable);

Copyright 2003 Mudra Services98 SWING - JTree // method children DefaultMutableTreeNode method1 = new DefaultMutableTreeNode("JTree()"); DefaultMutableTreeNode method2 = new DefaultMutableTreeNode("main()"); methodnode.add(method1); methodnode.add(method2); // create the tree from the default model DefaultTreeModel model = new DefaultTreeModel(filenode); jtree = new JTree(model); getContentPane().add("Center",new JScrollPane(jtree)); }

Copyright 2003 Mudra Services99 SWING - JTree public static void main(String args[]) { TreeExample treeexample = new TreeExample(); treeexample.setVisible(true); } }// end program

Copyright 2003 Mudra Services100 SWING - JTree Custom data models can be used with the JTree Extends from DefaultTreeModel Object getChild(Object parent,int index) int getChildCount(Object parent) boolean isLeaf(Object node) Each DefaultMutableTreeNode contains a user object which can store any object in the node

Copyright 2003 Mudra Services101 SWING - JTree package customtreeexample; public class JavaFile { private String name; private String[] imports; private String[] variables; private String[] methods; public JavaFile() { name = "CustomTreeExample.java"; imports = new String[] {"java.awt.*","javax.swing.*","javax.swing.tree.*"}; variables = new String[] {"JTree jtree"}; methods = new String[] {"CustomTreeExample()","main()"}; } Hardcoded values

Copyright 2003 Mudra Services102 SWING - JTree public String getName() { return name; } public String[] getSubTypes() { return(new String[] {"Imports","Data","Methods"}); } public String[] getImports() { return(imports); } public String[] getVariables() { return(variables); }

Copyright 2003 Mudra Services103 SWING - JTree public String[] getMethods() { return(methods); } } // end JavaFile

Copyright 2003 Mudra Services104 SWING - JTree package customtreeexample; import javax.swing.tree.*; public class SimpleTreeModel extends DefaultTreeModel { private JavaFile file; private DefaultMutableTreeNode root; private String rootName; public SimpleTreeModel(DefaultMutableTreeNode node,JavaFile file) { super(node); this.file = file; this.rootName = file.getName(); this.root = node; }

Copyright 2003 Mudra Services105 SWING - JTree // get the child at the specified index public Object getChild(Object parent,int index) { DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode)parent; String userObject = (String)parentNode.getUserObject(); if (userObject.equals(rootName)) { String[] types = file.getSubTypes(); DefaultMutableTreeNode node = new DefaultMutableTreeNode(types[index]); return(node); }

Copyright 2003 Mudra Services106 SWING - JTree else if (userObject.equals("Imports")) { String[] imports = file.getImports(); DefaultMutableTreeNode node = new DefaultMutableTreeNode(imports[index]); return(node); } else if (userObject.equals("Data")) { String[] variables = file.getVariables(); DefaultMutableTreeNode node = new DefaultMutableTreeNode(variables[index]); return(node); }

Copyright 2003 Mudra Services107 SWING - JTree else if (userObject.equals("Methods")) { String[] methods = file.getMethods(); DefaultMutableTreeNode node = new DefaultMutableTreeNode(methods[index]); return(node); } return(null); } // end getChild()

Copyright 2003 Mudra Services108 SWING - JTree // get the child count for the parent public int getChildCount(Object parent) { DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode)parent; String userObject = (String)parentNode.getUserObject(); if (userObject.equals(rootName)) { return(file.getSubTypes().length); } else if (userObject.equals("Imports")) { return(file.getImports().length); }

Copyright 2003 Mudra Services109 SWING - JTree else if (userObject.equals("Data")) { return(file.getVariables().length); } else if (userObject.equals("Methods")) { return(file.getMethods().length); } return(0); } // end getChildCount()

Copyright 2003 Mudra Services110 SWING - JTree // return TRUE if the node is a leaf public boolean isLeaf(Object node) { DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode)node; String userObject = (String)parentNode.getUserObject(); if (userObject.equals(rootName) || userObject.equals("Imports") || userObject.equals("Data") || userObject.equals("Methods")) { return(false); } return(true); } } // end SimpleTreeModel

Copyright 2003 Mudra Services111 SWING - JTree Custom Rendering Useful for changing icons, fonts etc Implement TreeCellRenderer class Component getTreeCellRendererComponent(…) must be implemented Nodes can contain any Component (TextField, Checkbox etc) Listening to tree selections Implement TreeSelectionListener

Copyright 2003 Mudra Services112 SWING - JTree Listening for Tree expansions Implement TreeExpansionListener Hiding root node tree.setRootVisible(false); Other methods tree.expandPath(path) tree.collapsePath(path) tree.setSelectionPath(path) tree.clearSelection()

Copyright 2003 Mudra Services113 SWING – Exercise 4

Copyright 2003 Mudra Services114 SWING – Exercise 4 Add a JTable to the center panel which shows the name of the file/directory and the size as columns. Whenever a file or directory is chosen it should update the table. What mechanism would you use to make the size column right justified?

Copyright 2003 Mudra Services115 SWING – Look And Feel Supports different look and feel Metal Motif Windows Mac MVC pattern Can create corporate look and feel Change the look And Feel UIManager.setLookAndFeel(“ ”);

Copyright 2003 Mudra Services116 SWING – Look And Feel Add this code to the tree example UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.Wind owsLookAndFeel");

Copyright 2003 Mudra Services117 SWING - Multithreading Threads can improve performance by allowing simultaneous execution of two or more related tasks Event Dispatching thread Event Dispatching thread and data collection threads can be separate but needs synchronization For performance Once a Swing component is displayed on the screen they cannot be changed from any thread other than the event dispatching thread Inherently Multi-thread unsafe

Copyright 2003 Mudra Services118 SWING - Multithreading invokeLater Queues the GUI request. The event dispatching thread will pick it up and execute it at some later time invokeAndWait Queues and waits till the task is performed. DO NOT CALL THIS FROM THE EVENT DISPATCHING THREAD

Copyright 2003 Mudra Services119 SWING - Multithreading class RunnableClass implements Runnable { public void run() { // do gui work here } // will queue the request for the event dispatching thread // to execute SwingUtilities.invokeLater(new RunnableClass());

Copyright 2003 Mudra Services120 SWING Exercise 5 Change the code for exercise 4 so that the output is in windows look and feel

Copyright 2003 Mudra Services121 SWING – Popular IDEs Integrated Development Environments Borland JBuilder (most popular) WebGain Visual Café IBM VisualAge For Java Sun[tm] ONE Studio 4

Copyright 2003 Mudra Services122 What’s Next Threads Go from single threaded applications to multithreaded applications Networking Go from one user applications to muti user applications Distributed Objects Go from objects in single JVM to objects in multiple JVMs (maybe in different machines)