/* * ElpGen2.java * * Created on May 15, 2000, 1:27 PM 1:27 PM */ /** * * @author Michael D. Meloan Copyright 2000 * @author Kathy Walrath -- BufferedImage * @version */ import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.awt.image.BufferedImage; public class ElpGen2 extends javax.swing.JApplet implements ActionListener { /** Creates new form ElpGen2 */ public ElpGen2() { initComponents (); } public void init() { /* default color is black */ colorInt = 0; drawing = false; timer = new Timer( 30, this ); timer.setInitialDelay( 0 ); timer.setCoalesce( true ); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the FormEditor. */ private void initComponents () {//GEN-BEGIN:initComponents jPanel1 = new DrElp(); jTextField1 = new javax.swing.JTextField (); jTextField2 = new javax.swing.JTextField (); jTextField3 = new javax.swing.JTextField (); jTextField4 = new javax.swing.JTextField (); jTextField5 = new javax.swing.JTextField (); jTextField6 = new javax.swing.JTextField (); jTextField7 = new javax.swing.JTextField (); jTextField8 = new javax.swing.JTextField (); jButton1 = new javax.swing.JButton (); jComboBox1 = new javax.swing.JComboBox(colorstrg); jLabel1 = new javax.swing.JLabel (); jLabel2 = new javax.swing.JLabel (); jLabel3 = new javax.swing.JLabel (); jLabel4 = new javax.swing.JLabel (); jLabel5 = new javax.swing.JLabel (); jLabel6 = new javax.swing.JLabel (); jLabel7 = new javax.swing.JLabel (); jLabel8 = new javax.swing.JLabel (); jLabel9 = new javax.swing.JLabel (); jButton2 = new javax.swing.JButton (); getContentPane ().setLayout (new java.awt.GridBagLayout ()); java.awt.GridBagConstraints gridBagConstraints1; jPanel1.setLayout (new java.awt.GridBagLayout ()); java.awt.GridBagConstraints gridBagConstraints2; gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 0; gridBagConstraints1.gridy = 0; gridBagConstraints1.gridheight = 19; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.ipadx = 530; gridBagConstraints1.ipady = 320; gridBagConstraints1.insets = new java.awt.Insets (10, 20, 0, 0); getContentPane ().add (jPanel1, gridBagConstraints1); jTextField1.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField1.setText ("265"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 4; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.ipadx = 31; gridBagConstraints1.ipady = 3; gridBagConstraints1.insets = new java.awt.Insets (0, 20, 0, 0); getContentPane ().add (jTextField1, gridBagConstraints1); jTextField2.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField2.setText ("160"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 4; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.ipadx = 31; gridBagConstraints1.ipady = 3; gridBagConstraints1.insets = new java.awt.Insets (0, 15, 0, 0); getContentPane ().add (jTextField2, gridBagConstraints1); jTextField3.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField3.setText ("110"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 8; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.ipadx = 31; gridBagConstraints1.ipady = 3; gridBagConstraints1.insets = new java.awt.Insets (4, 20, 0, 0); getContentPane ().add (jTextField3, gridBagConstraints1); jTextField4.setPreferredSize (new java.awt.Dimension(19, 17)); jTextField4.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField4.setText ("20"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 8; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.ipadx = 31; gridBagConstraints1.ipady = 3; gridBagConstraints1.insets = new java.awt.Insets (0, 15, 0, 0); getContentPane ().add (jTextField4, gridBagConstraints1); jTextField5.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField5.setText ("0"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 12; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.ipadx = 40; gridBagConstraints1.insets = new java.awt.Insets (4, 20, 0, 0); getContentPane ().add (jTextField5, gridBagConstraints1); jTextField6.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField6.setText ("450"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 12; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.ipadx = 31; gridBagConstraints1.ipady = 3; gridBagConstraints1.insets = new java.awt.Insets (4, 15, 0, 0); getContentPane ().add (jTextField6, gridBagConstraints1); jTextField7.setPreferredSize (new java.awt.Dimension(19, 17)); jTextField7.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField7.setText ("1.01"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 16; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.ipadx = 31; gridBagConstraints1.ipady = 3; gridBagConstraints1.insets = new java.awt.Insets (4, 15, 0, 0); getContentPane ().add (jTextField7, gridBagConstraints1); jTextField8.setFont (new java.awt.Font ("SansSerif", 0, 9)); jTextField8.setText ("1"); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 16; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.ipadx = 41; gridBagConstraints1.ipady = 3; gridBagConstraints1.insets = new java.awt.Insets (4, 20, 0, 0); getContentPane ().add (jTextField8, gridBagConstraints1); jButton1.setPreferredSize (new java.awt.Dimension(60, 23)); jButton1.setToolTipText (""); jButton1.setMaximumSize (new java.awt.Dimension(60, 23)); jButton1.setFont (new java.awt.Font ("Dialog", 0, 9)); jButton1.setText ("Draw"); jButton1.setBackground (java.awt.Color.lightGray); jButton1.setMinimumSize (new java.awt.Dimension(60, 23)); jButton1.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { jButton1ActionPerformed (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 0; gridBagConstraints1.gridwidth = 9; gridBagConstraints1.ipadx = -1; gridBagConstraints1.ipady = -7; gridBagConstraints1.insets = new java.awt.Insets (50, 20, 0, 0); getContentPane ().add (jButton1, gridBagConstraints1); jComboBox1.setFont (new java.awt.Font ("Dialog", 0, 9)); jComboBox1.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { jComboBox1ActionPerformed (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 17; gridBagConstraints1.gridwidth = 13; gridBagConstraints1.gridheight = 2; gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints1.insets = new java.awt.Insets (20, 20, 0, 0); getContentPane ().add (jComboBox1, gridBagConstraints1); jLabel1.setText ("X Value"); jLabel1.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 2; gridBagConstraints1.gridwidth = 3; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (10, 20, 0, 0); getContentPane ().add (jLabel1, gridBagConstraints1); jLabel2.setText ("Y Value"); jLabel2.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 2; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.gridheight = 2; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.ipadx = 11; gridBagConstraints1.ipady = 4; gridBagConstraints1.insets = new java.awt.Insets (10, 15, 0, 0); getContentPane ().add (jLabel2, gridBagConstraints1); jLabel3.setText ("Width"); jLabel3.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 6; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (20, 20, 0, 0); getContentPane ().add (jLabel3, gridBagConstraints1); jLabel4.setText ("Height"); jLabel4.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 6; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (20, 15, 0, 0); getContentPane ().add (jLabel4, gridBagConstraints1); jLabel5.setText ("Start Deg"); jLabel5.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 10; gridBagConstraints1.gridwidth = 4; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (20, 20, 0, 0); getContentPane ().add (jLabel5, gridBagConstraints1); jLabel6.setText ("To Deg"); jLabel6.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 10; gridBagConstraints1.gridwidth = 2; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (20, 15, 0, 0); getContentPane ().add (jLabel6, gridBagConstraints1); jLabel7.setText ("Deg Inc"); jLabel7.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 14; gridBagConstraints1.gridwidth = 2; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (20, 20, 0, 0); getContentPane ().add (jLabel7, gridBagConstraints1); jLabel8.setText ("Scale Fac"); jLabel8.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 14; gridBagConstraints1.gridwidth = 4; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (20, 15, 0, 0); getContentPane ().add (jLabel8, gridBagConstraints1); jLabel9.setText ("Color"); jLabel9.setFont (new java.awt.Font ("Dialog", 0, 9)); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 9; gridBagConstraints1.gridy = 19; gridBagConstraints1.gridwidth = 2; gridBagConstraints1.gridheight = 2; gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints1.insets = new java.awt.Insets (10, 0, 0, 0); getContentPane ().add (jLabel9, gridBagConstraints1); jButton2.setToolTipText ("Erase Draw Panel"); jButton2.setFont (new java.awt.Font ("Dialog", 0, 9)); jButton2.setText ("Erase"); jButton2.setBackground (java.awt.Color.lightGray); jButton2.addActionListener (new java.awt.event.ActionListener () { public void actionPerformed (java.awt.event.ActionEvent evt) { jButton2ActionPerformed (evt); } } ); gridBagConstraints1 = new java.awt.GridBagConstraints (); gridBagConstraints1.gridx = 11; gridBagConstraints1.gridy = 0; gridBagConstraints1.gridwidth = 5; gridBagConstraints1.ipadx = -1; gridBagConstraints1.ipady = -7; gridBagConstraints1.insets = new java.awt.Insets (50, 5, 0, 0); getContentPane ().add (jButton2, gridBagConstraints1); }//GEN-END:initComponents private void jComboBox1ActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBox1ActionPerformed colorInt = jComboBox1.getSelectedIndex(); if( g2d != null ) { g2d.setColor( colorObj[ colorInt ] ); } }//GEN-LAST:event_jComboBox1ActionPerformed private void jButton2ActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed // Erase Button Code // if g2d is null, no data to erase if ( g2d != null ) { drawing = false; g2d.dispose(); g2d = null; buffer = null; stopAnimation(); repaint(); } }//GEN-LAST:event_jButton2ActionPerformed private void jButton1ActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed // Draw Button Code // Input Field Data Validation inputError = false; try { xCent = Integer.parseInt(jTextField1.getText()); if ( xCent < -1000 | xCent > 1000 ) { /* x outside range */ jTextField1.setText("Too Big"); inputError = true; } } catch ( NumberFormatException nfe ) { inputError = true; jTextField1.setText("Integer"); } try { yCent = Integer.parseInt(jTextField2.getText()); if ( yCent < -1000 | yCent > 1000 ) { /* y outside range */ jTextField2.setText("Too Big"); inputError = true; } } catch ( NumberFormatException nfe ) { inputError = true; jTextField2.setText("Integer"); } try { w = Integer.parseInt(jTextField3.getText()); if ( w <= 0 ) { /* w must be a postive integer */ jTextField3.setText("Pos Int"); inputError = true; } if ( w > 5000 ) { /* w must be within range */ jTextField3.setText("Too Big"); inputError = true; } } catch ( NumberFormatException nfe ) { inputError = true; jTextField3.setText("Integer"); } try { h = Integer.parseInt(jTextField4.getText()); if ( h <= 0 ) { /* h must be a postive integer */ jTextField4.setText("Pos Int"); inputError = true; } if ( h > 5000 ) { /* h must be within range */ jTextField4.setText("Too Big"); inputError = true; } } catch ( NumberFormatException nfe ) { inputError = true; jTextField4.setText("Integer"); } try { degreeStart = Integer.parseInt(jTextField5.getText()); } catch ( NumberFormatException nfe ) { inputError = true; jTextField5.setText("Integer"); } try { degreeRotateTo = Integer.parseInt(jTextField6.getText()); } catch ( NumberFormatException nfe ) { inputError = true; jTextField6.setText("Integer"); } try { degreeIncrement = Integer.parseInt(jTextField8.getText()); if ( degreeIncrement <= 0 ) { /* degreeIncrement must be postive integer */ jTextField8.setText("Pos Int"); inputError = true; } } catch ( NumberFormatException nfe ) { inputError = true; jTextField8.setText("Integer"); } try { scaleFact = Float.parseFloat(jTextField7.getText()); if ( scaleFact <= 0 ) { /* scaleFact must be postive */ jTextField7.setText("Pos Flt"); inputError = true; } } catch ( NumberFormatException nfe ) { inputError = true; jTextField7.setText("Float"); } if ( !inputError ) { firstPass = true; drawing = true; startAnimation(); } }//GEN-LAST:event_jButton1ActionPerformed private Timer timer; private Graphics2D g2d = null; private BufferedImage buffer = null; private AffineTransform afn; private Ellipse2D elp; private Shape elpTrans; private String setColor; private Color colorObj[] = { Color.black, Color.cyan, Color.blue, Color.green, Color.magenta, Color.yellow }; private String colorstrg[] = { "black", "cyan", "blue", "green", "magenta", "yellow" }; private boolean drawing, inputError, firstPass; private Insets insets = new Insets( 0, 0, 0, 0 ); private int x, y, w, h, degreeStart, degreeIncrement, degreeRotateTo, colorInt; private int direction, theta, xCent, yCent; private double xFactor, yFactor, scaleFact, wTrans, hTrans, wTemp, hTemp; private double xTrans, yTrans, xTemp, yTemp, xTransCon, yTransCon; private double scaleFactacc; // Variables declaration - do not modify//GEN-BEGIN:variables private DrElp jPanel1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextField3; private javax.swing.JTextField jTextField4; private javax.swing.JTextField jTextField5; private javax.swing.JTextField jTextField6; private javax.swing.JTextField jTextField7; private javax.swing.JTextField jTextField8; private javax.swing.JButton jButton1; private javax.swing.JComboBox jComboBox1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JButton jButton2; // End of variables declaration//GEN-END:variables private class DrElp extends JPanel { public void DrElp() { } public void updateBuffer() { if ( firstPass ) { if ( buffer == null ) { Dimension size = getSize(); insets = getInsets(); size.width = size.width - insets.left - insets.right; size.height = size.height - insets.top - insets.bottom; buffer = (BufferedImage)createImage( size.width, size.height ); g2d = buffer.createGraphics(); g2d.setColor( getBackground() ); g2d.fillRect( insets.left, insets.top, size.width, size.height ); }//End if ( buffer == null) /* set anti-alias ON, for smooth lines */ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor( colorObj[colorInt] ); afn = new AffineTransform(); /* calculate upper left corner of rectange defining the ellipse */ x = xCent - w / 2; y = yCent - h / 2; elp = new Ellipse2D.Double( x, y, w, h ); /* calculate translation constants to keep ellipses centered */ xTransCon = (xCent*scaleFact - xCent)/scaleFact; yTransCon = (yCent*scaleFact - yCent)/scaleFact; scaleFactacc = scaleFact; afn.rotate( -Math.toRadians(degreeStart), xCent , yCent ); elpTrans = afn.createTransformedShape( elp ); g2d.draw( elpTrans ); direction = -1; /* shape rotates in positive direction */ if ( degreeRotateTo < 0 ) { direction = 1; /* shape rotates in negative direction */ } theta = degreeStart; firstPass = false; drawing = true; }//End if (firstPass) /* LOOP--ROTATE and EXPAND */ if (drawing) { if ( degreeRotateTo > 0 ) { theta += degreeIncrement; } else if ( degreeRotateTo < 0 ) { theta -= degreeIncrement; } else if ( degreeRotateTo == 0 && degreeStart != 0 ) { theta += degreeIncrement; } if ( ( degreeRotateTo > 0 ) && ( theta > degreeRotateTo ) ) { drawing = false; stopAnimation(); } else if ( ( degreeRotateTo < 0 ) && ( theta < degreeRotateTo ) ) { drawing = false; stopAnimation(); } else if ( ( degreeRotateTo == 0 ) && ( (theta > 360 ) || (theta == 0) ) ) { drawing = false; stopAnimation(); } else { /* Affine Transforms */ afn.scale( scaleFact, scaleFact ); afn.translate( -xTransCon , -yTransCon ); afn.rotate( Math.toRadians(degreeIncrement)*direction, xCent, yCent ); elpTrans = afn.createTransformedShape( elp ); g2d.draw( elpTrans ); scaleFactacc *= scaleFact; /* if wildly outside viewable area, turn off the loop */ if ( scaleFactacc > 300.0 || scaleFactacc < .001 ) { drawing = false; stopAnimation(); } } }//End if ( drawing ) }//End updateBuffer() public void paintComponent( Graphics g ) { if ( buffer != null ) { Graphics2D graphics = (Graphics2D)g; graphics.drawImage( buffer, insets.left, insets.top, this ); } else { super.paintComponent( g ); } }//End paintComponent() }//End inner class DrElp public void actionPerformed(final java.awt.event.ActionEvent p1) { jPanel1.updateBuffer(); jPanel1.repaint(); } public void start() { startAnimation(); } public void stop() { stopAnimation(); } public synchronized void startAnimation() { if ( !drawing ) { /* do nothing, animation not enabled */ } else if ( !timer.isRunning() ) { timer.start(); } } public synchronized void stopAnimation() { if( timer.isRunning() ) { timer.stop(); } } }//End applet ElpGen2