420 likes | 428 Views
Learn about graphical user interface (GUI) components, event handlers, inner classes, and anonymous inner classes in Java programming. Explore Swing, JOptionPane, JFrame, and various GUI components.
E N D
Advanced Programming in Java PeymanDodangeh Sharif University of Technology Spring 2015
Agenda • Graphical User Interface (GUI) • GUI Components • Event Handlers • Inner Classes • Anonymous Inner Classes Sharif University of Technology
Graphical User Interface (GUI) • GUIpresents a mechanism for interacting with application. • a user-friendly mechanism • What are other mechanisms? • Console Applications • File • Web Applications • … • GUI is pronounced “GOO-ee” Sharif University of Technology
GUI Components • GUIs are built from GUI components • sometimes called controls or widgets • widget: short for window gadgets • GUI component: • an object with which the user interacts • via the mouse or the keyboard • Example? • Button, Textbox, Menu, … Sharif University of Technology
Swing • AWT was the early way for GUI in java • Abstract Window Toolkit • Java.awt package • An AWT component’s behavior may be different between platforms. • Swing is a newer approach • In this presentation we review Swing GUI components • javax.swingpackage Sharif University of Technology
JOptionPane • JOptionPane class has simple static methods • for input and output • Using Dialog boxes • JOptionPane.showInputDialog • Returns a String • JOptionPane.showMessageDialog • Shows a dialog box Sharif University of Technology
JOptionPane Sample String name = JOptionPane.showInputDialog("Enter your name:"); JOptionPane.showMessageDialog(null, "Salam "+name +"!"); Sharif University of Technology
Modal Dialog • JOptionPane dialogs are called modal dialogs • While the dialog is on the screen… • the user cannot interact with the rest of the application Sharif University of Technology
JFrame • We create a window containing Swing GUI components • This window object is usually instance of JFrameor a subclass of JFrame • JFrame provides the basic attributes and behaviors of a window • a title bar at the top • minimize and maximize buttons • close button Sharif University of Technology
JFrame Example JFrame frame = newJFrame(); frame.setSize(300, 150); frame.setVisible(true); frame.setLayout(newFlowLayout()); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); Sharif University of Technology
Swing GUI Components • JButton • JLabel • JTextField • JComboBox • JRadioButton • JMenu • … Sharif University of Technology
JLabel and JButton • JLabel label = new JLabel("Salam"); • label.setToolTipText("Tooltip1"); • frame.add(label); • JButton button = newJButton("Click!"); • button.setToolTipText("salam :-)"); • frame.add(button); Sharif University of Technology
Other GUI Components JTextField textbox = newJTextField(10); frame.add(textbox); JComboBox combo = newJComboBox( newString[]{"Red", "Blue", "Green"}); frame.add(combo); Sharif University of Technology
Layout Management • You must attach each GUI component to a container • such as a JFrame. • You typically must decide whereto position each GUI component • known as specifying the layout • Java provides several layout managers • They help you position components Sharif University of Technology
FlowLayout • In FlowLayout layout manager: • components are placed on a container • from left to right in the order in which they’re added • When no more components can fit on the current line • continue on the next line • Other layouts: • GridLayout, BoxLayout, … Sharif University of Technology
Layouts • Three ways to arrange components in a GUI • Layout managers • Simple and Fast • Absolute positioning • provides the greatest level of control GUI’s appearance. • Visual programming in an IDE • They generate codes • They may use layout managers Sharif University of Technology
Absolute Positioning • Set Container’s layout to null • Specify the absolute position of each GUI component • with respect to the upper-left corner of the Container • by using Component methods • setSizeand setLocation or setBounds • absolute positioning can be tedious • unless you have a support by an IDE Sharif University of Technology
IDE Support • Many IDEs provide GUI design tools • You can specify a component’s exact size and location • in a visual manner by using the mouse • simplifies creating GUIs • each IDE generates this code differently • You should know the underlying codes • Eclipse Plugin Sharif University of Technology
Extending JFrame • You can also extend JFrame to create new frames… Sharif University of Technology
public class MyFrame extends JFrame{ JLabel label; JButton button; JTextField textbox; JComboBox combo; public MyFrame(){ super("Frame Title"); label = new JLabel("Salam"); label.setToolTipText("Label Tooltip"); add(label); button = new JButton("Click!"); button.setToolTipText("salam :-)"); add(button); textbox = new JTextField(10); add(textbox); combo = new JComboBox( new String[]{"Red", "Blue", "Green"}); add(combo); } } Sharif University of Technology
Event Handling • GUIs are event driven • User interaction => events • An Event drives the program to perform a task • Some events: • clicking a button • typing in a text field • selecting an item from a menu • closing a window • moving the mouse Sharif University of Technology
Event Handling (2) • event handler : • The code that performs a task in response to an event • event handling : • The overall process of responding to events Sharif University of Technology
Event Handlers button = newJButton("Click!"); ActionListener al = newClickListener(); button.addActionListener(al); publicclassClickListener implementsActionListener { publicvoidactionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, “Salam!!!”); } } Sharif University of Technology
Better Event Handlers • I want to show a message-box • According to the value of a component • For example a text-field or a combo-box • How can I do that? • Inner Classes Sharif University of Technology
public class MyFrame extends JFrame{ public class ClickListener implements ActionListener { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, textbox.getText()); } } JButtonbutton; JTextFieldtextbox; public MyFrame(){ button = new JButton("Click!"); button.addActionListener(new ClickListener()); add(button); textbox = new JTextField(10); add(textbox); } Sharif University of Technology
Class Types classFriendlyClass{ } publicclassOuterClass { privateintvalue; publicclass Inner{ publicvoid f(){ … } } } Friendly Class Public class Inner Class Sharif University of Technology
Inner Classes • Declared in another class • Instantiated using a reference object of outer class • Has access to this object • The inner class can be static • No reference object of outer class is needed • No access to outer class is provided Sharif University of Technology
publicclassOuterClass { privateintvalue = 2; class Inner{ publicvoidinnerMethod(){ OuterClass.this.value = 5; } } publicvoidouterMethod(){ Inner inner = new Inner(); inner.innerMethod(); } publicstaticvoid main(String[] args) { OuterClass outer = newOuterClass(); System.out.println(outer.value); outer.outerMethod(); System.out.println(outer.value); } } OuterClass.this is implicitly saved in inner object Sharif University of Technology
publicclassOuterClass { privateintvalue = 2; class Inner{ publicvoid f(){ OuterClass.this.value = 5; } } publicstaticvoid main(String[] args) { OuterClass outer = newOuterClass(); OuterClass.Inner inner = outer.new Inner(); System.out.println(outer.value); inner.f(); System.out.println(outer.value); } } Why we need outer reference? Sharif University of Technology
classOuterClass { staticclass Inner{ publicvoid f(){ System.out.println("f() invoked"); } } } publicclassMainClass { publicstaticvoid main(String[] args) { OuterClass.Inner in = newOuterClass.Inner(); in.f(); } } Sharif University of Technology
Inner Class Specifiers • static • final • Access Specifiers • public • private • Friendly (no specifier) • protected Sharif University of Technology
Anonymous Inner Class • An inner class • With no name • Created once • Used once • No access to this class from any other place • Once created and used Sharif University of Technology
interface Inner{ voidinnerMethod();} publicclassOuterClass { privateintvalue = 2; publicvoidouterMethod(){ Inner inner = new Inner() { publicvoidinnerMethod() { OuterClass.this.value = 5; } }; inner.innerMethod(); } publicstaticvoid main(String[] args) { OuterClass outer = newOuterClass(); System.out.println(outer.value); outer.outerMethod(); System.out.println(outer.value); } } Sharif University of Technology
Anonymous Inner Class • Usually implements an interface • Or extends another class • And Overrides some special method • Main Application : Event Handlers Sharif University of Technology
public class MyFrame extends JFrame{ JButtonbutton; JTextFieldtextbox; public MyFrame(){ button = new JButton("Click!"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, textbox.getText()); } }); add(button); textbox = new JTextField(10); add(textbox); } } Sharif University of Technology
Further Reading • javaw • Java Web Applications • Web Interface • SWT • Java Look and Feels Sharif University of Technology