Testbed2

See Capacitor.java


Testbed2.java

// Testbed1.java
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Testbed2 extends JPanel
{
    final static int  resolution = 96;
    Capacitor c1 = new Capacitor();
    JButton button;
    Testbed2()
    {
	button = new JButton("Rotate");
      	ButtonHandler handler = new ButtonHandler();
      	button.addActionListener( handler );
    }

    protected void show_size(Graphics g)
    {
	int width = getWidth();
	int height = getHeight();
	String str = String.format("width %d height %d",width,height);
	FontMetrics fm = g.getFontMetrics();
	Rectangle2D rect = fm.getStringBounds(str,g);
	width -= rect.getWidth();
	height -= rect.getHeight();
	g.drawString(str,width/2,height/2);
    }
    protected void draw_grid(Graphics g)
    {
	Graphics2D g2 = (Graphics2D) g;
	AffineTransform saveXform = g2.getTransform();
	Paint savePaint = g2.getPaint();
	g2.setPaint(new Color(220,220,255));
	Stroke saveStroke = g2.getStroke();
	g2.setStroke(new BasicStroke(1.0f/resolution));
	double u = 4.0;
	for (int i=-4; i<=4; i++) {
		double v = i;			
		g2.draw(new Line2D.Double(-u,v,4,v));
		g2.draw(new Line2D.Double(v,-u,v,u));
	}
	// locate origin
	/*
	g2.setPaint(Color.BLACK);
	u = 0.05;
	g2.draw(new Line2D.Double(-u,u,u,-u));
	g2.draw(new Line2D.Double(-u,-u,u,u));
	*/
	g2.setStroke(saveStroke);
	g2.setTransform(saveXform);
    }

    public void paintComponent(Graphics g)
    {
	super.paintComponent( g );
	Graphics2D g2 = (Graphics2D) g;
	AffineTransform saveXform = g2.getTransform();
	Paint savePaint = g2.getPaint();
	int width = getWidth();
	int height = getHeight();
	g2.translate(width/2,height/2);
	g2.scale(resolution,-resolution);
	draw_grid(g);
	Stroke saveStroke = g2.getStroke();
	g2.setStroke(new BasicStroke(2.0f/resolution,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));

	c1.draw(g);

	g2.setTransform(saveXform);
	g2.setPaint(savePaint);
	g2.setStroke(saveStroke);
	// show_size(g);
    }

   // inner class for button event handling
   private class ButtonHandler implements ActionListener 
   {
      // handle button event
      public void actionPerformed( ActionEvent event )
      {
	double angle = c1.angle + 45.0;
	if (angle>=360.0) angle = 0.0;
	c1.setAngle(angle);
	repaint();
      } // end method actionPerformed
   } // end private inner class ButtonHandler

    public static void main( String args[] )
    {
	EventQueue.invokeLater(new Runnable()
	{
	    public void run()
	    {
		Testbed2 panel = new Testbed2();
		JFrame application = new JFrame("Testbed2");
		application.add(panel.button,BorderLayout.SOUTH);
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		application.add(panel);
		application.setSize(496,358);
		application.setVisible(true);
	    }
	});
    }
}


Results




Maintained by John Loomis, updated Mon Feb 17 12:18:21 2014