//b1.1 import jdsl.core.api.*; import jdsl.core.ref.*; //e1.1 import java.util.*; import java.awt.*; import java.awt.event.*; /* * A class to introduce the JDSL. It reads words into a jdsl.ref.Sequence * object and writes them back out. * * @author Robert Cohen (rfc) * @version JDSL 2 */ public class Echo extends Frame implements ActionListener,WindowListener { /* ************************************ */ /* The members described in the lesson. */ /* ************************************ */ /* Takes a string and converts it to a sequence of words. The StringTokenizer object returns an enumeration of tokens, each a word from the original string. Each word is added to the end of the sequence. */ //b1.2 private Sequence getWords(String s) { Sequence ret = new ArraySequence(); StringTokenizer st = new StringTokenizer(s); while (st.hasMoreTokens()) { ret.insertLast(st.nextToken()); } return ret; } //e1.2 /* Takes a Sequence of words and returns a string consisting of all the words, each separated by a space. Uses a jdsl.api.ObjectIterator to iterate through the words. */ //b1.3 private String concatenate(Sequence s) { String ret = ""; for(ObjectIterator i=s.elements();i.hasNext();) ret += (i.nextObject() + " "); return ret; } //e1.3 /* ************************************ */ /* Members not described in the lesson. */ /* ************************************ */ // The sequence to store the words. Sequence seq; // The GUI widgets Label title = new Label( "Echo" ); TextField inField = new TextField( "", 50 ); TextField outField = new TextField( "", 50 ); Button quitBtn = new Button("Quit"); /* The Constructor simple sets up the GUI. */ public Echo() { setUpWindow(); } public void actionPerformed(ActionEvent e) { //The user entered text. if (e.getSource()==inField) { String in = inField.getText(); //converts the string into a sequence of words seq = getWords(in); //outputs the words. outField.setText(concatenate(seq)); // The user clicked the quit button. } else if (e.getSource()==quitBtn) quit(); } /* Run the frame. */ public static void main(String args[]) { Echo e = new Echo(); e.show(); } /* Set up the GUI. */ private void setUpWindow() { setTitle("Echo"); title.setFont( new Font( "Helvetica", Font.BOLD , 24 ) ); Panel titlePanel = new Panel(); titlePanel.add(title); Panel inPanel = new Panel(); inPanel.add(new Label("Enter a sentence")); inPanel.add(inField); outField.setEditable(false); Panel outPanel = new Panel(); outPanel.add(new Label("Result")); outPanel.add(outField); Panel centerPanel = new Panel(); centerPanel.add(inPanel); centerPanel.add(outPanel); Panel btnPanel = new Panel(); btnPanel.add(quitBtn); add(titlePanel, BorderLayout.NORTH); add(centerPanel, BorderLayout.CENTER); add(btnPanel, BorderLayout.SOUTH); addWindowListener(this); quitBtn.addActionListener(this); inField.addActionListener(this); inField.requestFocus(); setSize(500,250); setLocation(50,50); } private void quit() { System.exit(0); } public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {quit();} public void windowClosing(WindowEvent e) {quit();} public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} }