graphical user interfaces
play

Graphical User Interfaces Fundamentals of Computer Science Outline - PowerPoint PPT Presentation

Graphical User Interfaces Fundamentals of Computer Science Outline Command line versus GUI apps Java GUI applications JFrame Layout managers Popular widgets Events Action listeners Inner listener classes User


  1. Graphical User Interfaces Fundamentals of Computer Science

  2. Outline  Command line versus GUI apps  Java GUI applications  JFrame  Layout managers  Popular widgets  Events  Action listeners  Inner listener classes

  3. User Interfaces  Command Line Interface (CLI)  Good for experts  Automating thing via scripts (e.g. DOS batch files)  Easy to use remotely (e.g. over SSH)  Low resource consumption  Graphical User Interface (GUI)  Good for novices  Difficult to automate (e.g. macros in Office)  Good for presenting multiple views, graphical data  Remote access difficult (e.g. VNC, Remote Desktop)  High resource consumption

  4. Java GUIs  Thus far: StdDraw  Good for drawing  But no GUI widgets:  Buttons  Combo boxes  Text fields  Dialog boxes  Today: doing it ourselves  Use the Java API to create a GUI  Creating: common widgets, area to draw on  In practice, often done using a GUI builder

  5. Top-Level Container  JFrame  Container that holds all the GUI elements  Created by main() method

  6. JFrame Example  GUI with a single giant button  Button doesn't do anything (yet) import javax.swing.*; public class SimpleButton { public static void main(String [] args) Create the frame and { a button. Add the JFrame frame = new JFrame(); button to the content JButton button = new JButton("click me!"); portion of the frame. frame.getContentPane().add(button); frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); Makes the X box close frame.setSize(300, 300); everything. frame.setVisible( true); Make a reasonable size } and actually display. } SimpleButton.java

  7. Adding Multiple Things  Layout manager  Handles arranging multiple things in the frame • BorderLayout – 5 regions: NORTH, SOUTH, EAST, WEST, CENTER – Default type for a frame MultiButtons.java • FlowLayout – Left to right – Creates multiple rows if needed – Default type for a panel (more on panels in a bit) MultiButtonsFlow.java

  8. Adding Multiple Things • BoxLayout – Vertical stack of components • BoxLayout.Y_AXIS – Horizontal row • BoxLayout.X_AXIS – Won't rearrange if you resize window MultiButtonsBox.java

  9. Handy JFrame Methods  Some JFrame methods: Method Description Default constructor, a window with no JFrame() name Constructor, give the window a title JFrame(String title) Change the layout manager for the frame setLayout(LayoutManager mgr) setDefaultCloseOperation(int op) What to do when the frame is closed Sets to the given width and height setSize(int width, int height) Show or hide depending on value of b setVisible(boolean b) Returns the content pane where we add getContentPane() things Change the title of the window setTitle(String s)

  10. Handy JButton Methods  Some JButton methods: Method Description Constructor a new button with the given JButton(String s) label Change the button’s label setText(String s) Enables or disables the button setEnabled(boolean b) Tell layout manager how big you would setPreferredSize(Dimension d) like the button to be

  11. Widget'o'rama JButton JLabel JTextField JCheckBox JTextArea JSlider JSeparator JRadioButton ButtonGroup JComboBox Widgets.java

  12. GUI Events  Events  Something triggers  Usually the user  Examples:  User clicks button  Moves the mouse  Changing selection in a combo box list

  13. Event Listeners and Sources  Event listener  Code called when an event occurs  Done by implementing a Java interface  Which one depends on what you care about  Register listener with the object  Event source  The object that generated the event  e.g. the JButton object  Normally you'll be handling events  Not generating them

  14. Button Counter Example  Single button window  Every time button is pushed, increment counter  Display counter as label of the button

  15. import javax.swing.*; import java.awt.event.*; public class ButtonCount implements ActionListener { private int count = 0; private JButton button; public void actionPerformed(ActionEvent event) { count++; button.setText("count = " + count); } public void go() { JFrame frame = new JFrame(); button = new JButton("count = " + count); frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); frame.getContentPane().add(button); frame.setSize(300,300); frame.setVisible( true); button.addActionListener( this); } public static void main(String [] args) { ButtonCount gui = new ButtonCount(); gui.go(); } } ButtonCount.java

  16. Multiple Listeners  Listening for multiple buttons  Option 1: Single actionPerformed() method  Use the passed in event object  Test which button object triggered the method  Option 2: Multiple inner classes  Each classes implements actionListener  Each has its own actionPerformed() method  NOTE: can use private instance vars of parent

  17. Option 1: Single Listener Approach public class FarmListener implements ActionListener { private JButton buttonCow; private JButton buttonDog; private JButton buttonCat; public void actionPerformed(ActionEvent event) { if (event.getSource() == buttonCow) StdAudio. play ("cow.wav"); else if (event.getSource() == buttonDog) StdAudio. play ("dog.wav"); else if (event.getSource() == buttonCat) StdAudio. play ("cat.wav"); } public void go() { ... buttonCow.addActionListener( this); buttonDog.addActionListener( this); buttonCat.addActionListener( this); } ... } FarmListener.java

  18. Option 2: Inner Listener Approach public class FarmInner { private JButton buttonCow; private JButton buttonDog; private JButton buttonCat; class CowListener implements ActionListener { public void actionPerformed(ActionEvent event) { StdAudio. play ("cow.wav"); } } class DogListener implements ActionListener { public void actionPerformed(ActionEvent event) { StdAudio. play ("dog.wav"); } } class CatListener implements ActionListener { public void actionPerformed(ActionEvent event) { StdAudio. play ("cat.wav"); } } public void go() { ... buttonCow.addActionListener( new CowListener()); buttonDog.addActionListener( new DogListener()); buttonCat.addActionListener( new CatListener()); } ... } FarmInner.java

  19. Summary  Building Java GUIs  JFrame basis for GUI  Choice of layout manager  We looked at just three:  BorderLayout, FlowLayout, BoxLayout  Handles where widgets such as buttons appear  Variety of widgets  Event handling  Widgets trigger events  Notify registered listeners  Single listener that handles multiple widget  Separate inner class for each widget

  20. Hands On Exercise  Create a Jframe container with a button. The button’s initial text should read “Click Me”. When clicked, the text should change to “Thanks!”  Open Moodle, go to CSCI 136, Section 11  Open the dropbox for today, In-Class Exercise 9  Drag and drop your program file to the Moodle dropbox  You get: 1 point if you turn in something, 2 points if you turn in something that is correct.

Recommend


More recommend