170 likes | 453 Views
GUI Programming in Java. Tim McKenna Seneca@York. GUI Programming Concepts. conventional programming: sequence of operations is determined by the program what you want to happen, happens when you want it event-driven programming:
E N D
GUI Programming in Java Tim McKenna Seneca@York
GUI Programming Concepts • conventional programming: • sequence of operations is determined by the program • what you want to happen, happens when you want it • event-driven programming: • sequence of operations is determined by the user’s interaction with the application’s interface • anything that can happen, happens at any time
GUI Design Concepts • a wealth of information creates a poverty of attention- Herbert Simon • Principles of good GUI Design • IBM's Design concepts • Saul Greenberg's HCI pages • Tim's HCI notes
GUI Programming Concepts in Java • Java GUI ("Swing") has components • Windows GUI has controls • Unix GUI has widgets • examples: labels,buttons, check boxes, radio buttons, text input boxes, pull down lists • Java Swing components: JLabel,JButton, JCheckBox, JRadioButton, JTextField, JTextArea, JComboBox
Java GUI history: the AWT • AWT(JDK 1.0, 1.1): Abstract Window Toolkit • package: java.awt, java.awt.event • heavyweight components using native GUI system elements • used for applets until most browsers supported JRE 1.2
Swing in Java • Swing(Java 2, JDK 1.2+) • lightweight components that do not rely on the native GUI or OS • “look and feel” of Swing components • are identical on different platforms • can be customized • Swing inherits from AWT • AWT still used for events, layouts
Swing Components in Java • advanced GUI support. e.g. drag-and-drop • package names: javax.swing, javax.swing.event • components inherit from JComponent • components are added to a top-level container: JFrame, JDialog, or JApplet.
running a Swing application • java -Dswing.aatext=true MySwingClass • the option sets the system property "swing.aatext" to "true" to enable anti-aliasing for every JComponent • javawruns a GUI without the console window • e.g. HelloWorldSwing.java
Basic GUI Programming Stepsin Java • declare a container and components • add components to one or more containers using a layout manager • register event listener(s) with the components • create event listener method(s)
Basic GUI Programming Concepts in Java • Example: JFrameDemoTM.java, JFrameDemoTM2.java, JFrameDemo.java • container : a screen window/applet window/panel that groups and arranges GUI components • GUI component: an object with visual representation • Swing containers: JFrame, JApplet, JPanel • AWT containers: Frame, Applet, Panel
GUI Programming: The Java Approach • event-driven programming • a piece of code (i.e. event handler) is attached to a GUI component • an event handler is called when an event (e.g. a mouse click) is activated / fired • The Delegation Event Model in Java • processing of an event is delegated to an object (the listener) in the program
Event-driven Programming in Java • event source: a GUI component that generates / fires an event • event: a user interaction (e.g. a click on the button) • event listener: an object that has implemented event handlers to react to an event
Event Handling in Java • the delegation event model - event listeners must be registered with an event source in order to receive notification
Event Handling in Java • registration of an event listener- write a class that implements an [event type]Listener interface - create an instance of that class (i.e. an event listener) - register the listener with a GUI component: add[event type]Listener ( <an event listener> )
Event Handling in Java • a listener interface has a list of standard event handlers (i.e. methods) • API documentation - java.awt.event - event classes - listener interfaces - adapter classes
Event Handling in Java • different ways of coding the event listeners • JFrameDemoTM.java uses named inner classes. • JFrameDemoTM2.java uses named inner classes and shows how to consolidate window closing from two different events. • JFrameDemo.java does not use inner classes.