Kĩ thuật lập trình - Chapter 16: Event - Driven programming

GUI applications: Model-View-Controller design Embedded applications: cell phones car engines airplanes

ppt29 trang | Chia sẻ: huyhoang44 | Lượt xem: 599 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Chapter 16: Event - Driven programming, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Programming Languages 2nd edition Tucker and NoonanChapter 16Event-Driven ProgrammingOf all men’s miseries the bitterest is this, to know so much and to have control over nothing. Herodotus (484-432 BC)Contents16.1 Event-Driven Control16.2 Event Handling16.3 Three Examples16.4 Other Applications 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.ExamplesGUI applications: Model-View-Controller designEmbedded applications: cell phones car engines airplanes16.1 Event-Driven ControlComputation 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.Imperative and Event-Driven Paradigms ContrastedFigure 16.1 Input to an event-driven program comes from autonomous event sources. Eg: human, robot sensors, engine sensors.PropertiesAn 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.Model-View-Controller (MVC)Model: the object being implemented. Ex: game, calculator.Controller: input mechanisms. Ex: buttons, menus, combo boxes.View: output.Ex: Tic-Tac-Toe ModelWhose turn is it?State of the board.Has someone won?Are there no empty squares?Events in JavaSubclasses of AWTEventEvent sources in Swing are subclasses of JComponent Program must listen for eventsEx: for a JButton b b.addActionListener(listener)Java Class AWTEvent and Its Subclasses*Figure 16.2 Java EventListener Class Interface and Its Subclasses*Figure 16.4WidgetListenerInterfaceJButtonActionListeneractionPerformedJComboBoxActionListeneractionPerformedJLabelJTextAreaActionListeneractionPerformedJTextFieldActionListeneractionPerformedMouseListener...MouseMotionListener...Java GUI ApplicationA 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.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.3.1 A Simple GUI Iinterfacecombo : Nothing, Rectangle, MessageechoArea : report eventstyping : enter messagesInitial Frame Design for a Graphical Drawing ToolFigure 16.6private int lastX = 0; // first click's x-y coordinatesprivate int lastY = 0;private int clickNumber = 0; private JComboBox combo;private String[ ] choices = {"Nothing", "Rectangle", "Message"};private JTextArea echoArea; private JTextField typing;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()); // 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);}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"); }}First Step in an Interaction: The User Selects Rectangle from the MenuFigure 16.9private 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; // 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)); } else if (combo.getSelectedItem().equals("Message")) // for a message, display it g.drawString(typing.getText(), x, y); } // mouseClicked}Effect of Selecting Rectangle Choice and Clicking the Mouse TwiceFigure 16.12public 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();}

Các file đính kèm theo tài liệu này:

  • pptch16a_9884.ppt