420 likes | 531 Views
Advanced Programming in Java. Sadegh Aliakbary Sharif University of Technology Fall 2011. Agenda. Graphical User Interface (GUI) GUI Components Event Handlers Inner Classes Anonymous Inner Classes. Graphical User Interface (GUI).
E N D
Advanced Programming in Java SadeghAliakbary Sharif University of Technology Fall 2011
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