Grafico.java



// VISUALIZA GRAFICOS POR BLOQUES...
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


class Grafico extends JFrame
{
	Menu M;
	Lienzo G;

	public static void main(String R[]) { new Grafico(); }

	public Grafico()
	{
		setLayout(null);
		setBounds(100, 100, 800, 800); setVisible(true); setResizable(false);

		M = new Menu(); add(M); M.setVisible(true); M.setBounds(0,0,800,100);

		G=new Lienzo(M);add(G);G.setVisible(true);G.setBounds(0,110,800,650);
	}

	protected void processWindowEvent(WindowEvent e)
        { if (e.getID() == WindowEvent.WINDOW_CLOSING) System.exit(0); }
}


class Menu extends JPanel
{
	JButton BLinea, BCuadro, BCirculo, BTodo;
	JLabel LIndica;
	int Tipo=1; // 1=LINEA, 2=CIRCULO, 3=CUADRO

	public Menu()
	{
		setLayout(null); setBackground(Color.green);
		BLinea = new JButton("LINEA"); BLinea.setBounds(10, 10, 100, 30);
		BCirculo = new JButton("CIRCULO"); BCirculo.setBounds(130,10,100,30);
		BCuadro = new JButton("CUADRO"); BCuadro.setBounds(250, 10, 100, 30);
		BTodo = new JButton("TODO"); BTodo.setBounds(370, 10, 100, 30);
		LIndica = new JLabel("Indicador"); LIndica.setBounds(600, 10, 90, 30);

		add(BLinea); add(BCirculo); add(BCuadro); add(BTodo); add(LIndica);

		BLinea.addActionListener( new RATON() );
		BCirculo.addActionListener(new RATON() );
		BCuadro.addActionListener(new RATON() );
		BTodo.addActionListener(new RATON() );
	}


	class RATON implements ActionListener
	{
		String CAD = "";
		public void actionPerformed(ActionEvent R)
		{
			CAD = R.getActionCommand();
			LIndica.setText(CAD);
			// 1=LINEA, 2=CIRCULO, 3=CUADRO
			if (CAD.equals("LINEA")) Tipo=1;
			if (CAD.equals("CIRCULO")) Tipo=2;
			if (CAD.equals("CUADRO")) Tipo=3;
		}
	}
}


class Lienzo extends JPanel
{
	Menu M;
	Point Pi, Pf;
	Point VLIi[] = new Point[10]; Point VLIf[] = new Point[10];
	Point VCIi[] = new Point[10]; Point VCIf[] = new Point[10];

	// 1=LINEA, 2=CIRCULO, 3=CUADRO
	int NLI=0, NCI=0, NCU=0;	// cantidades iniciales

	boolean Bandera = false;	// primer click


	class RATONAZO implements MouseListener
	{
		public void mouseClicked(MouseEvent R)
		{
			if ( Bandera )		// segundo click
			{
				if (M.Tipo==1)
				{
					if (NLI != 10)
					{
						VLIf[NLI] = new Point();
						VLIf[NLI].x = R.getX();
						VLIf[NLI].y = R.getY();
						NLI++;
					}
				}
				if (M.Tipo==2)
                                {
                                        if (NCI != 10)
                                        {
                                                VCIf[NCI] = new Point();
                                                VCIf[NCI].x = R.getX();
                                                VCIf[NCI].y = R.getY();
                                                NCI++;
                                        }
                                }
				Bandera = false; repaint();
			}
			else
			{
				if (M.Tipo==1)
				{
					if (NLI != 10)
					{
						VLIi[NLI] = new Point();
						VLIi[NLI].x = R.getX();
						VLIi[NLI].y = R.getY();
					}
				}
				if (M.Tipo==2)
                                {
                                        if (NCI != 10)
                                        {
                                                VCIi[NCI] = new Point();
                                                VCIi[NCI].x = R.getX();
                                                VCIi[NCI].y = R.getY();
                                        }
                                }
				Bandera = true;
			}
		}
		public void mouseEntered(MouseEvent e) {}
		public void mouseExited(MouseEvent e) {}
		public void mousePressed(MouseEvent e) {}
		public void mouseReleased(MouseEvent e) {}
	}




	public Lienzo(Menu M)
	{
		this.M = M;
		setBackground(Color.blue);
		addMouseListener(new RATONAZO());
	}

	public void paint(Graphics G)
	{
		int n=0;		// contador auxiliar
		G.setColor(Color.blue);
		G.fillRect(0,0,800, 650) ;
		G.setColor(Color.yellow);
		switch (M.Tipo)
		{
			case 1:
			for (n=0; n < NLI; n++)
			G.drawLine(VLIi[n].x, VLIi[n].y, VLIf[n].x, VLIf[n].y);
			break;

			case 2:
			for (n=0; n < NCI; n++)
                        G.drawOval(VCIi[n].x, VCIi[n].y, VCIf[n].x, VCIf[n].y);
                        break;
		}
	}
}