9.12) public interface Filter boolean accept(object x); Describes any class whose objects can measure other objects. public interface Measurer double measure(object anobject); This program tests the use of a Measurer and a Filter. public class DataSetTester class BankMeasurer implements Measurer public double measure(object anobject) BankAccount ba = (BankAccount) anobject; return ba.getbalance(); class BankFilter implements Filter public boolean accept(object x) BankAccount ba = (BankAccount) x; return ba.getbalance() > 1000; Measurer m = new BankMeasurer(); Filter f = new BankFilter(); DataSet data = new DataSet(m, f); data.add(new BankAccount(1)); data.add(new BankAccount(100));
data.add(new BankAccount(2000)); data.add(new BankAccount(950)); data.add(new BankAccount(4000)); System.out.println("Average balance: " + data.getaverage()); System.out.println("Expected: 3000"); BankAccount b = (BankAccount) data.getmaximum(); double balance = b.getbalance(); System.out.println("Highest balance: " + balance); System.out.println("Expected: 4000"); 9.21) import java.awt.event.actionevent; import java.awt.event.actionlistener; An action listener that prints a message. public class ClickListener implements ActionListener private int count; public ClickListener() count = 0; public void actionperformed(actionevent event) count++; if (count == 1) System.out.println("I was clicked 1 time!"); else System.out.println("I was clicked " + count + " times!"); import java.awt.event.actionlistener; import javax.swing.jbutton;
import javax.swing.jframe; import javax.swing.jpanel; This program demonstrates how to install an action listener. public class ButtonViewer private static final int FRAME_WIDTH = 100; private static final int FRAME_HEIGHT = 100; JFrame frame = new JFrame(); JPanel panel = new JPanel(); JButton button = new JButton("Click me!"); panel.add(button); JButton button2 = new JButton("Click me too!"); panel.add(button2); frame.add(panel); ActionListener listener = new ClickListener(); button.addactionlistener(listener); ActionListener listener2 = new ClickListener(); button2.addactionlistener(listener2); frame.setsize(frame_width, FRAME_HEIGHT); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true); 9.28) import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.joptionpane; import javax.swing.timer; import java.util.date;
Displays the current time once every second. public class TimePrinter class CurrentTime implements ActionListener public void actionperformed(actionevent event) Date now = new Date(); System.out.println(now); CurrentTime listener = new CurrentTime(); ticks final int DELAY = 1000; // milliseconds between timer Timer t = new Timer(DELAY, listener); t.start(); JOptionPane.showMessageDialog(null, "Quit?"); System.exit(0); 9.34) Allows the user to specify a circle by typing the radius in a text field and then clicking on the center. public class CircleDrawerFrame extends JFrame private CircleDrawerComponent component; private static final int FRAME_WIDTH = 400; private static final int FRAME_HEIGHT = 400; public int radius;
public CircleDrawerFrame() component = new CircleDrawerComponent(); component.setpreferredsize(new Dimension(400,350)); // add mouse press listener class MousePressListener implements MouseListener public void mousepressed(mouseevent event) int x = event.getx(); int y = event.gety(); radius"); String ansradius = JOptionPane.showInputDialog("Enter radius = Integer.parseInt(ansRadius); component.setpositionandsize(x, y, radius); // do-nothing methods public void mousereleased(mouseevent event) public void mouseclicked(mouseevent event) public void mouseentered(mouseevent event) public void mouseexited(mouseevent event) MouseListener listener = new MousePressListener(); component.addmouselistener(listener); setsize(frame_width, FRAME_HEIGHT); add(component); public class CircleDrawerComponent extends JComponent private Ellipse2D.Double circle; private int x; private int y; private int radius; public CircleDrawerComponent() x = 0;
y = 0; radius = 0; circle = null; public void setpositionandsize(int ax, int ay, int aradius) x = ax; y = ay; radius = aradius; // the circle that the paintcomponent method draws circle = new Ellipse2D.Double(x - radius, y - radius, radius * 2, radius * 2); repaint(); public void paintcomponent(graphics g) if (circle == null) return; Graphics2D g2 = (Graphics2D) g; g2.draw(circle); import javax.swing.jframe; Allows the user to specify a circle by typing the radius in a text field and then clicking on the center. public class CircleDrawer JFrame frame = new CircleDrawerFrame(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.settitle("circledrawer"); frame.setvisible(true);