1 / 29

Programming Languages 2nd edition Tucker and Noonan

Programming Languages 2nd edition Tucker and Noonan. Chapter 16 Event-Driven Programming Of all men’s miseries the bitterest is this, to know so much and to have control over nothing. Herodotus (484-432 BC). Contents. 16.1 Event-Driven Control 16.2 Event Handling

bridie
Télécharger la présentation

Programming Languages 2nd edition Tucker and Noonan

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming Languages2nd editionTucker and Noonan Chapter 16 Event-Driven Programming Of all men’s miseries the bitterest is this, to know so much and to have control over nothing. Herodotus (484-432 BC)

  2. Contents 16.1 Event-Driven Control 16.2 Event Handling 16.3 Three Examples 16.4 Other Applications

  3. A conventional model of computation has the program prescribe the exact order of input. • Programs terminate once the input is exhausted. • Event-driven programs do not control the sequence in which input events occur.

  4. Examples • GUI applications: Model-View-Controller design • Embedded applications: • cell phones • car engines • airplanes

  5. 16.1 Event-Driven Control • Computation as interaction [Stein] • Computation is a community of persistent entities coupled together by their ongoing interactive behavior ... Beginning and end, when present, are special cases that can often be ignored.

  6. Imperative and Event-Driven Paradigms Contrasted Figure 16.1

  7. Input to an event-driven program comes from autonomous event sources. Eg: human, robot sensors, engine sensors.

  8. Properties • An event-driven program has no perceived stopping point. • The traditional read-eval-print loop does not explicitly appear. • An application processes an input and exits.

  9. Model-View-Controller (MVC) • Model: the object being implemented. Ex: game, calculator. • Controller: input mechanisms. Ex: buttons, menus, combo boxes. • View: output.

  10. Ex: Tic-Tac-Toe Model • Whose turn is it? • State of the board. • Has someone won? • Are there no empty squares?

  11. Events in Java • Subclasses of AWTEvent • Event sources in Swing are subclasses of JComponent • Program must listen for events • Ex: for a JButton b • b.addActionListener(listener)

  12. Java Class AWTEvent and Its Subclasses* Figure 16.2

  13. Java EventListener Class Interface and Its Subclasses* Figure 16.4

  14. Java GUI Application • A GUI application is a program that runs in its own window and communicates with users using buttons, menus, mouse clicks, etc. • A GUI application often has a paint method, which is invoked whenever the application needs to repaint itself.

  15. import javax.swing.JFrame; • public class GUIApp { • public static void main (String[ ] args) { • JFrame frame = new JFrame(); • frame.setDefaultCloseOperation( • JFrame.EXIT_ON_CLOSE); • MyApp app = new MyApp( ); // JPanel • frame.getContentPane().add(app); • frame.show( ); • } • }

  16. 16.3.1 A Simple GUI Iinterface • combo : Nothing, Rectangle, Message • echoArea : report events • typing : enter messages

  17. Initial Frame Design for a Graphical Drawing Tool Figure 16.6

  18. private int lastX = 0; // first click's x-y coordinates • private int lastY = 0; • private int clickNumber = 0; • private JComboBox combo; • private String[ ] choices = {"Nothing", "Rectangle", "Message"}; • private JTextArea echoArea; • private JTextField typing;

  19. public Skeleton( ) { • // Set the background color and mouse listener • setBackground(Color.white); • addMouseListener(new MouseHandler()); • // Add a button to the Panel. • JButton clearButton = new JButton("Clear"); • clearButton.setForeground(Color.black); • clearButton.setBackground(Color.lightGray); • add(clearButton); • clearButton.addActionListener( • new ClearButtonHandler());

  20. // Create a menu of user combos and add it • combo = new JComboBox(choices); • add(combo); • combo.addActionListener( • new ComboHandler()); • // Add a TextField and a TextArea • typing = new JTextField(20); • add(typing); • typing.addActionListener(new TextHandler()); • echoArea = new JTextArea(2, 40); • echoArea.setEditable(false); • add(echoArea); • }

  21. private class ComboHandler implements ActionListener { • public void actionPerformed (ActionEvent e) { • String c = (String) (combo.getSelectedItem()); • echoArea.setText("Combo selected: " + c); • clickNumber = 0; • if (c.equals("Rectangle")) • echoArea.append("\nClick to set upper " • + " left corner of the rectangle"); • else if (c.equals("Message")) • echoArea.append( • "\nEnter a message in the text area"); • }}

  22. First Step in an Interaction: The User Selects Rectangle from the Menu Figure 16.9

  23. private class MouseHandler extends MouseAdapter { • public void mouseClicked(MouseEvent e) { • int x = e.getX(); • int y = e.getY(); • echoArea.setText("Mouse Clicked at " + • e.getX() + ", " + e.getY() + "\n"); • Graphics g = getGraphics(); • if (combo.getSelectedItem(). • equals("Rectangle")) { • clickNumber = clickNumber + 1;

  24. // is it the first click? • if (clickNumber % 2 == 1) { • echoArea.append("Click to set lower right" • + " corner of the rectangle"); • lastX = x; • lastY = y; • } • // or the second? • else g.drawRect(lastX, lastY, • Math.abs(x-lastX), Math.abs(y-lastY)); • }

  25. else if (combo.getSelectedItem().equals("Message")) • // for a message, display it • g.drawString(typing.getText(), x, y); • } // mouseClicked • }

  26. Effect of Selecting Rectangle Choice and Clicking the Mouse Twice Figure 16.12

  27. public static void main(String args[]) { • JFrame frame = new JFrame(); • frame.setDefaultCloseOperation( • JFrame.EXIT_ON_CLOSE); • Skeleton panel = new Skeleton( ); • frame.getContentPane().add(panel); • frame.setSize(500, 500); • frame.show(); • }

More Related