1 36 37 40 41 import java.awt.*; 42 import java.awt.event.*; 43 import java.applet.*; 44 45 50 public class ArcTest extends Applet { 51 ArcControls controls; ArcCanvas canvas; 54 public void init() { 55 setLayout(new BorderLayout()); 56 canvas = new ArcCanvas(); 57 add("Center", canvas); 58 add("South", controls = new ArcControls(canvas)); 59 } 60 61 public void destroy() { 62 remove(controls); 63 remove(canvas); 64 } 65 66 public void start() { 67 controls.setEnabled(true); 68 } 69 70 public void stop() { 71 controls.setEnabled(false); 72 } 73 74 public void processEvent(AWTEvent e) { 75 if (e.getID() == Event.WINDOW_DESTROY) { 76 System.exit(0); 77 } 78 } 79 80 public static void main(String args[]) { 81 Frame f = new Frame("ArcTest"); 82 ArcTest arcTest = new ArcTest(); 83 84 arcTest.init(); 85 arcTest.start(); 86 87 f.add("Center", arcTest); 88 f.setSize(300, 300); 89 f.show(); 90 } 91 92 public String getAppletInfo() { 93 return "An interactive test of the Graphics.drawArc and \nGraphics.fillArc routines. Can be run \neither as a standalone application by typing 'java ArcTest' \nor as an applet in the AppletViewer."; 94 } 95 } 96 97 class ArcCanvas extends Canvas { 98 int startAngle = 0; 99 int extent = 45; 100 boolean filled = false; 101 Font font = new java.awt.Font ("SansSerif", Font.PLAIN, 12); 102 103 public void paint(Graphics g) { 104 Rectangle r = getBounds(); 105 int hlines = r.height / 10; 106 int vlines = r.width / 10; 107 108 g.setColor(Color.pink); 109 for (int i = 1; i <= hlines; i++) { 110 g.drawLine(0, i * 10, r.width, i * 10); 111 } 112 for (int i = 1; i <= vlines; i++) { 113 g.drawLine(i * 10, 0, i * 10, r.height); 114 } 115 116 g.setColor(Color.red); 117 if (filled) { 118 g.fillArc(0, 0, r.width - 1, r.height - 1, startAngle, extent); 119 } else { 120 g.drawArc(0, 0, r.width - 1, r.height - 1, startAngle, extent); 121 } 122 123 g.setColor(Color.black); 124 g.setFont(font); 125 g.drawLine(0, r.height / 2, r.width, r.height / 2); 126 g.drawLine(r.width / 2, 0, r.width / 2, r.height); 127 g.drawLine(0, 0, r.width, r.height); 128 g.drawLine(r.width, 0, 0, r.height); 129 int sx = 10; 130 int sy = r.height - 28; 131 g.drawString("Start = " + startAngle, sx, sy); 132 g.drawString("Extent = " + extent, sx, sy + 14); 133 } 134 135 public void redraw(boolean filled, int start, int extent) { 136 this.filled = filled; 137 this.startAngle = start; 138 this.extent = extent; 139 repaint(); 140 } 141 } 142 143 class ArcControls extends Panel 144 implements ActionListener { 145 TextField startTF; 146 TextField extentTF; 147 ArcCanvas canvas; 148 149 public ArcControls(ArcCanvas canvas) { 150 Button b = null; 151 152 this.canvas = canvas; 153 add(startTF = new IntegerTextField("0", 4)); 154 add(extentTF = new IntegerTextField("45", 4)); 155 b = new Button("Fill"); 156 b.addActionListener(this); 157 add(b); 158 b = new Button("Draw"); 159 b.addActionListener(this); 160 add(b); 161 } 162 163 public void actionPerformed(ActionEvent ev) { 164 String label = ev.getActionCommand(); 165 166 int start, extent; 167 try { 168 start = Integer.parseInt(startTF.getText().trim()); 169 } catch (NumberFormatException nfe) { 170 start = 0; 171 } 172 try { 173 extent = Integer.parseInt(extentTF.getText().trim()); 174 } catch (NumberFormatException nfe) { 175 extent = 0; 176 } 177 178 canvas.redraw(label.equals("Fill"), start, extent); 179 } 180 } 181 182 class IntegerTextField extends TextField { 183 184 String oldText = null; 185 186 public IntegerTextField(String text, int columns) { 187 super(text, columns); 188 enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.TEXT_EVENT_MASK); 189 oldText = getText(); 190 } 191 192 protected void processEvent(AWTEvent evt) { 198 int id = evt.getID(); 199 if (id != KeyEvent.KEY_TYPED) { 200 super.processEvent(evt); 201 return; 202 } 203 204 KeyEvent kevt = (KeyEvent) evt; 205 char c = kevt.getKeyChar(); 206 207 if (Character.isDigit(c) || (c == '\b') || (c == '\u007f') || 210 (c == '\u002d')) { 211 super.processEvent(evt); 212 return; 213 } 214 215 Toolkit.getDefaultToolkit().beep(); 216 kevt.consume(); 217 } 218 219 protected void processTextEvent(TextEvent te) { 225 String newText = getText(); 227 if (newText.equals("") || textIsInteger(newText)) { 228 oldText = newText; 229 super.processTextEvent(te); 230 return; 231 } 232 233 Toolkit.getDefaultToolkit().beep(); 234 setText(oldText); 235 } 236 237 private boolean textIsInteger(String textToCheck) { 242 int value = -1; 243 244 try { 245 value = Integer.parseInt(textToCheck, 10); 246 return true; 247 } catch (NumberFormatException nfe) { 248 return false; 249 } 250 } 251 } 252 253 254
| Popular Tags
|