lunes, 5 de octubre de 2015

Como dibujar una linea, circulo, rectángulo y curva en java

Para dibujar una linea utilizamos las siguientes lineas de código

package graficos;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Color;
class Pantalla extends Frame {
public Pantalla() {
this.setSize(200,150 );
this.setVisible( true );
}
public void paint(Graphics g) {
g.setColor(Color.Blue);
g.drawLine(50, 50, 100, 100);
}
public static void main( String[] args ) {
Pantalla p = new Pantalla();
}
}

Para dibujar un circulo utilizaremos el siguiente código


import java.awt.*; import java.awt.event.*;
class Circulos extends Frame implements ActionListener {

static public void main(String[]args){
  new Circulos().show();
}

//componentes
private Button 
  circulo=new Button("dibujar círculo"), 
  quit=new Button("quit");

//tela de dibujo
private Canvas cv=new Canvas();
private final int W=300,H=300;//ancho y alto

//constructor
public Circulos() {
 //diagramar ventana
   setSize(W,H+2*25);//25 pixeles por borde
   setLayout(new BorderLayout());

 //agregar componentes
   add("North",circulo);
   add("South",quit);
   cv.setSize(W,H); //tamaño de la tela
   add("Center",cv); 

 //activar escuchador
   circulo.addActionListener(this);
   quit.addActionListener(this);
}

//dibujar Circulo
public void actionPerformed(ActionEvent x){
  if(x.getSource()==quit) System.exit(0);
  //coordenadas del centro del circulo
  int h=U.azar(0,W-1), v=U.azar(0,H-1);
  //diámetro y radio
  int d=U.azar(0,Math.min(W,H)-1), r=d/2;
  //obtener objeto de clase Graphics
  Graphics g=cv.getGraphics();
  //establecer color (convención RGB)
  g.setColor(new Color(U.azar(0,255),  //rojo
                       U.azar(0,255),  //verde
                       U.azar(0,255)));//azul

Para dibujar un rectángulo usaremos el código siguiente


Para dibujar un rectángulo en pantalla, basta con llamar al método drawRect() indicando la posición en que deseamos colocar la esquina superior-izquierda del rectángulo y su ancho y alto. Por ejemplo, el código siguiente, Rect1.java, pinta un rectángulo alrededor del applet que lo contiene:
import java.awt.*;
import java.applet.Applet;

public class Rect1 extends Applet {
    int ancho,alto;

    public void init() {
        Dimension d = size();    // devuelve el tamaño del applet
        ancho = d.width;
        alto = d.height;
    
        repaint();
        }

    public void paint( Graphics g ) {
        g.drawRect( 0,0,ancho-1,alto-1 );
        }
    }

El método drawRect() pinta un rectángulo abierto, si queremos un rectángulo relleno, tendremos que invocar al método fillRect(), que tiene idéntica sintaxis. El código siguiente, Rect2.java, pinta un rectángulo relleno en el centro del applet que lo contiene:
import java.awt.*;
import java.applet.Applet;

public class Rect2 extends Applet {
    int apAncho;
    int apAlto;
    int x,y,ancho,alto;

    public void init() {
        Dimension d = size();
        apAncho = d.width;
        apAlto = d.height;
        ancho = apAncho/3;
        alto = apAlto/3;
        x = (apAncho - ancho)/2;
        y = (apAlto - alto)/2;
        
        repaint();
        }

    public void paint( Graphics g ) {
        g.drawRect( 0,0,apAncho-1,apAlto-1 );
        g.fillRect( x,y,ancho-1,alto-1 );
        }
    }

Para dibujar una curva haremos lo siguiente


El java.awt.geom paquete que permite crear un segmento de curva cuadrática o cúbica.

Segmento de curva cuadrática

El QuadCurve2D clase implementa la forma de interfaz. Esta clase representa un segmento de curva paramétrica cuadrática en (x, y) el espacio de coordenadas. LosQuadCurve2D.Float y QuadCurve2D.Double subclases especificar una curva cuadrática en flotador y doble precisión.
Varios setCurve métodos se utilizan para especificar dos puntos extremos y un punto de la curva, cuyas coordenadas se puede definir directamente, por las coordenadas de otros puntos y mediante el uso de una matriz dada control.  Un método muy útil, setCurve (QuadCurve2D), establece el cuadrática la curva con los mismos puntos finales y el punto de control como una curva que se suministra. Por ejemplo:
// Crear nueva QuadCurve2D.Float
QuadCurve2D q = new QuadCurve2D.Float ();
// Dibujar QuadCurve2D.Float con coordenadas set
q.setCurve (x1, y1, ctrlx, ctrly, x2, y2);
g2.draw (q);
Cuadrar segmento de curva paramétrica

Segmento de curva cúbica

El CubicCurve2D clase también implementa la forma de interfaz. Esta clase representa un segmento de curva paramétrica cúbico en (x, y) el espacio de coordenadas.CubicCurve2D.Float y CubicCurve2D.Double subclases especificar una curva cúbica en flotador y de doble precisión.
El CubicCurve2D clase tiene métodos similares para establecer la curva como el QuadraticCurve2D clase, excepto con un segundo punto de control. Por ejemplo:
// Crear nueva CubicCurve2D.Double
CubicCurve2D c = new CubicCurve2D.Double ();
// Dibujar CubicCurve2D.Double con coordenadas set
c.setCurve (x1, y1, ctrlx1,
           ctrly1, ctrlx2, ctrly2, x2, y2);
g2.draw (c);
Segmento de curva cúbica

Botones en Java

Se pueden crear objetos Button con el operador new: Button boton; boton = new Button( "Botón");La cadena utilizada en la creación del botón aparecerá en el botón cuando se visualice en pantalla. Esta cadena también se devolverá para utilizarla como identificación del botón cuando ocurra un evento.Cada vez que el usuario pulsa un botón, se produce un evento, de la misma forma que se produce un evento cuando se aprieta el botón del ratón. Los eventos de pulsación de un botón se pueden capturar sobrecargando el método action():public boolean action( Event evt,Object obj ) { if( evt.target instanceof Button ) System.out.println( (String)obj ); else System.out.println( "Evento No-Button" ); }La distinción entre todos los botones existentes se puede hacer utilizando el objeto destino pasado por el objeto Event y comparándolo con los objetos botón que hemos dispuesto en nuestro interface:import java.awt.*;import java.applet.Applet; public class Botones extends Applet { Button b1,b2,b3; public void init() { b1 = new Button( "Botón B1" ); b2 = new Button( "Botón B2" ); b3 = new Button( "Botón B3" ); this.add( b1 ); this.add( b2 ); this.add( b3 ); } public boolean action( Event evt,Object obj ) { if( evt.target.equals( b1 ) ) System.out.println( "Se ha pulsado el boton B1" ); if( evt.target.equals( b2 ) ) System.out.println( "Se ha pulsado el boton B2" ); if( evt.target.equals( b3 ) ) System.out.println( "Se ha pulsado el boton B3" ); return true; } }


Clase JFrame en Java

La clase JFrame es ligeramente incompatible con la clase Frame. Como todo otro contenedor de alto nivel de la librería Swing, un JFrame contiene un JRootPane como su único elemento. El contentPane proporcionado por el rootPane debería , como una regla , contener todos los componentes que no sean menú mostrados por el JFrame.

A diferencia del Frame , un JFrame tiene alguna noción de como responder cuando el usuario intenta cerrar la ventana. El comportamiento por defecto es simplemente ocultar el JFrame cuando el usuario cierra la ventana. Para cambiar el comportamiento por defecto se debe invocar al método setDefaultCloseOperation() .


MÉTODOS



ATRIBUTOS

static int
EXIT_ON_CLOSE
La salida por defecto al cerrar una ventana.

CONSTRUCTORES


JFrame()
Crea un nuevo frame que es inicialmente visible


JFrame(String título)
Crea un nuevo frame con el título indicado como parámetro

MÉTODOS

Tipo de retorno
Método
Descripción

Container
getContentPane()
Retorna el objeto contentPane.

int
getDefaultCloseOperation()
Retorna la operación que ocurre cuando el usuario hace la operación de cerrar la ventana del frame

JMenuBar
getJMenuBar()
Retorna el menúBar establecido en el frame

void
remove(Component comp)
Remueve el componente indicado como parámetro de éste contenedor

void
setContentPane(Container contentPane)
Establece la propiedad del contentPane

void
setDefaultCloseOperation(int operation)
Establece la operación que sucederá por defecto cuando el usuario cierra la ventana

void
setJMenuBar(JMenuBar menu)
Establece la barra de menú para el frame

void
setLayout(LayoutManager layout)
Por defecto, la distribución de los paneles de éste componente no debe cambiarse; en su lugar, debería ser cambiada la distribución de su contentPane que generalmente es un panel.