package howto; import java.awt.*; public class FigRect extends java.applet.Applet implements Figure { private TextField tfx, tfy, tfw, tfh, tfaw, tfah; private TextField tfdrx, tfdry, tfdrw, tfdrh; private TextField tffrx, tffry, tffrw, tffrh; private TextField tfrrx, tfrry, tfrrw, tfrrh, tfrraw, tfrrah; private TextField tffrrx, tffrry, tffrrw, tffrrh, tffrraw, tffrrah; private TextField tf3rx, tf3ry, tf3rw, tf3rh; private TextField tff3rx, tff3ry, tff3rw, tff3rh; private Choice ch3r, chf3r, ch3; private Panel p; private CardLayout cl; private NewCanvas nc; private Choice ch; public void init() { setBackground(Color.white); setLayout(new BorderLayout()); Panel p1; p = new Panel(); p.setLayout(cl = new CardLayout()); p.add("Rectangle", p1 = new Panel()); p1.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); p1.add(new Label("drawRect (")); p1.add(tfdrx = new TextField(2)); p1.add(new Label(",")); p1.add(tfdry = new TextField(2)); p1.add(new Label(",")); p1.add(tfdrw = new TextField(2)); p1.add(new Label(",")); p1.add(tfdrh = new TextField(2)); p1.add(new Label(")")); p.add("Filled Rectangle", p1 = new Panel()); p1.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); p1.add(new Label("fillRect (")); p1.add(tffrx = new TextField(2)); p1.add(new Label(",")); p1.add(tffry = new TextField(2)); p1.add(new Label(",")); p1.add(tffrw = new TextField(2)); p1.add(new Label(",")); p1.add(tffrh = new TextField(2)); p1.add(new Label(")")); p.add("Round Rectangle", p1 = new Panel()); p1.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); p1.add(new Label("drawRoundRect (")); p1.add(tfrrx = new TextField(2)); p1.add(new Label(",")); p1.add(tfrry = new TextField(2)); p1.add(new Label(",")); p1.add(tfrrw = new TextField(2)); p1.add(new Label(",")); p1.add(tfrrh = new TextField(2)); p1.add(new Label(",")); p1.add(tfrraw = new TextField(2)); p1.add(new Label(",")); p1.add(tfrrah = new TextField(2)); p1.add(new Label(")")); p.add("Filled Round Rectangle", p1 = new Panel()); p1.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); p1.add(new Label("fillRoundRect (")); p1.add(tffrrx = new TextField(2)); p1.add(new Label(",")); p1.add(tffrry = new TextField(2)); p1.add(new Label(",")); p1.add(tffrrw = new TextField(2)); p1.add(new Label(",")); p1.add(tffrrh = new TextField(2)); p1.add(new Label(",")); p1.add(tffrraw = new TextField(2)); p1.add(new Label(",")); p1.add(tffrrah = new TextField(2)); p1.add(new Label(")")); p.add("3D Rectangle", p1 = new Panel()); p1.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); p1.add(new Label("draw3DRect (")); p1.add(tf3rx = new TextField(2)); p1.add(new Label(",")); p1.add(tf3ry = new TextField(2)); p1.add(new Label(",")); p1.add(tf3rw = new TextField(2)); p1.add(new Label(",")); p1.add(tf3rh = new TextField(2)); p1.add(new Label(",")); p1.add(ch3r = new Choice()); ch3r.addItem("true"); ch3r.addItem("false"); p1.add(new Label(")")); p.add("Filled 3D Rectangle", p1 = new Panel()); p1.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); p1.add(new Label("fill3DRect (")); p1.add(tff3rx = new TextField(2)); p1.add(new Label(",")); p1.add(tff3ry = new TextField(2)); p1.add(new Label(",")); p1.add(tff3rw = new TextField(2)); p1.add(new Label(",")); p1.add(tff3rh = new TextField(2)); p1.add(new Label(",")); p1.add(chf3r = new Choice()); chf3r.addItem("true"); chf3r.addItem("false"); p1.add(new Label(")")); add("North", p); nc = new NewCanvas(this); add("Center", nc); p1 = new Panel(); p1.add(new Button("Draw")); ch = new Choice(); ch.addItem("Rectangle"); ch.addItem("Filled Rectangle"); ch.addItem("Round Rectangle"); ch.addItem("Filled Round Rectangle"); ch.addItem("3D Rectangle"); ch.addItem("Filled 3D Rectangle"); p1.add(ch); add("South", p1); tfx = tfdrx; tfy = tfdry; tfw = tfdrw; tfh = tfdrh; tfaw = tfrraw; tfah = tfrrah; ch3 = ch3r; tfx.setText("10"); tfy.setText("10"); tfw.setText("100"); tfh.setText("100"); tfaw.setText("10"); tfah.setText("10"); ch3.select("true"); } private int parseTextField(TextField tf) { int n; try { n = Integer.parseInt(tf.getText()); } catch (NumberFormatException nfe) { tf.setText("0"); n = 0; } return n; } public void paintCallback(Graphics g) { int x = parseTextField(tfx); int y = parseTextField(tfy); int w = parseTextField(tfw); int h = parseTextField(tfh); int aw = parseTextField(tfaw); int ah = parseTextField(tfah); boolean b = ch3.getSelectedItem().equals("true"); if (ch.getSelectedItem().equals("Rectangle")) g.drawRect(x, y, w, h); else if (ch.getSelectedItem().equals("Filled Rectangle")) g.fillRect(x, y, w, h); else if (ch.getSelectedItem().equals("Round Rectangle")) g.drawRoundRect(x, y, w, h, aw, ah); else if (ch.getSelectedItem().equals("Filled Round Rectangle")) g.fillRoundRect(x, y, w, h, aw, ah); else if (ch.getSelectedItem().equals("3D Rectangle")) g.draw3DRect(x, y, w, h, b); else if (ch.getSelectedItem().equals("Filled 3D Rectangle")) g.fill3DRect(x, y, w, h, b); } public boolean action(Event e, Object o) { if (o.equals("Draw")) { nc.repaint(); return true; } else if (o.equals("Rectangle")) { tfdrx.setText(tfx.getText()); tfdry.setText(tfy.getText()); tfdrw.setText(tfw.getText()); tfdrh.setText(tfh.getText()); tfx = tfdrx; tfy = tfdry; tfw = tfdrw; tfh = tfdrh; cl.show(p, (String)o); nc.repaint(); return true; } else if (o.equals("Filled Rectangle")) { tffrx.setText(tfx.getText()); tffry.setText(tfy.getText()); tffrw.setText(tfw.getText()); tffrh.setText(tfh.getText()); tfx = tffrx; tfy = tffry; tfw = tffrw; tfh = tffrh; cl.show(p, (String)o); nc.repaint(); return true; } else if (o.equals("Round Rectangle")) { tfrrx.setText(tfx.getText()); tfrry.setText(tfy.getText()); tfrrw.setText(tfw.getText()); tfrrh.setText(tfh.getText()); tfrraw.setText(tfaw.getText()); tfrrah.setText(tfah.getText()); tfx = tfrrx; tfy = tfrry; tfw = tfrrw; tfh = tfrrh; tfaw = tfrraw; tfah = tfrrah; cl.show(p, (String)o); nc.repaint(); return true; } else if (o.equals("Filled Round Rectangle")) { tffrrx.setText(tfx.getText()); tffrry.setText(tfy.getText()); tffrrw.setText(tfw.getText()); tffrrh.setText(tfh.getText()); tffrraw.setText(tfaw.getText()); tffrrah.setText(tfah.getText()); tfx = tffrrx; tfy = tffrry; tfw = tffrrw; tfh = tffrrh; tfaw = tffrraw; tfah = tffrrah; cl.show(p, (String)o); nc.repaint(); return true; } else if (o.equals("3D Rectangle")) { tf3rx.setText(tfx.getText()); tf3ry.setText(tfy.getText()); tf3rw.setText(tfw.getText()); tf3rh.setText(tfh.getText()); ch3r.select(ch3.getSelectedItem()); tfx = tf3rx; tfy = tf3ry; tfw = tf3rw; tfh = tf3rh; ch3 = ch3r; cl.show(p, (String)o); nc.repaint(); return true; } else if (o.equals("Filled 3D Rectangle")) { tff3rx.setText(tfx.getText()); tff3ry.setText(tfy.getText()); tff3rw.setText(tfw.getText()); tff3rh.setText(tfh.getText()); chf3r.select(ch3.getSelectedItem()); tfx = tff3rx; tfy = tff3ry; tfw = tff3rw; tfh = tff3rh; ch3 = chf3r; cl.show(p, (String)o); nc.repaint(); return true; } return false; } public Dimension preferredSize() { return new Dimension(500, 200); } public static void main(String [] args) { Frame f = new Frame("Rectangle"); FigRect fr = new FigRect(); fr.init(); f.add("Center", fr); f.pack(); f.show(); } }