miércoles, 30 de junio de 2010

PRACTICA 3: Figuras


Hola a todos!!

Bueno pues esta vez les traigo esta pequena aplicacion que aun estoy perfeccionando.
Se trata de una aplicacion tipo Paint, pero tiene algunos bugs que debo corregir
BUGS:
- Hasta ahora solo tengo un bug reconocible, si ustedes ejecutan la aplicacion y dibujan lineas todo va bien, pero ya que se agregaron varias lineas al momento de querer dibujar cuadros, todos los objetos se vuelven cuadros, y al momento de querer agregar elipses todos los objetos se vuelven elipses x_x.

Se aceptan propuestas para arreglarlo e igual lo dejo posteado para que lo revisen y tomen lo que les sirva :)

OTROS OBJETIVOS
- Boton que permita controlar el grosor y color de linea
- Boton que permita dibujar figuras solidas
- Agregar mas figuras a la barra

Gracias por su visita ^_^

PD: Ya agregue links de descarga a todos mis codigos, se encuentran al final de cada entrada.

CODIGO:


import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.awt.event.*;

class Linea {
protected double xs, ys, xf, yf;
public Linea(double x1, double y1, double x2, double y2) {
this.xs = x1;
this.ys = y1;
this.xf = x2;
this.yf = y2;
}
}

public class Paint extends JPanel implements MouseListener, MouseMotionListener, ActionListener {

public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if(cmd.equals("LINE")) {
this.linea = true;
this.cuadro = false;
this.circulo = false;
}
if(cmd.equals("SQUARE")) {
this.cuadro = true;
this.linea = false;
this.circulo = false;
}
if(cmd.equals("ELLIPSE")) {
this.circulo = true;
this.linea = false;
this.cuadro = false;
}
if (cmd.equals("EXIT")) {
System.exit(1);
} else if (cmd.equals("RESET")) {
this.lineas.clear();
this.repaint();
}
return;
}

public void mouseClicked(MouseEvent e) {
int ancho = super.getWidth();
int altura = super.getHeight();
double x = (e.getX() / (double)ancho);
double y = (e.getY() / (double)altura);

if (!this.dibujando) {
this.startX = x;
this.startY = y;
this.ahoraX = x;
this.ahoraY = y;
this.dibujando = true;
} else {
this.lineas.add(new Linea(this.startX, this.startY, x, y));
this.dibujando = false;
this.startX = Paint.INVALIDO;
this.startY = Paint.INVALIDO;
this.ahoraX = Paint.INVALIDO;
this.ahoraY = Paint.INVALIDO;
}
this.repaint();
return;
}

private List lineas;

public void mouseEntered(MouseEvent e) {
return;
}

public void mouseExited(MouseEvent e) {
return;
}

public void mousePressed(MouseEvent e) {
return;
}

public void mouseReleased(MouseEvent e) {
return;
}

public void mouseDragged(MouseEvent e) {
return;
}

public void mouseMoved(MouseEvent e) {
if (this.dibujando) {
int ancho = super.getWidth();
int altura = super.getHeight();
double x = (e.getX() / (double)ancho);
double y = (e.getY() / (double)altura);
this.ahoraX = x;
this.ahoraY = y;
this.repaint();
}
return;
}

public static void main(String[] args) {
JFrame ventana = new JFrame();
ventana.setTitle("Draw 1.0");
ventana.setLocation(100, 100);
ventana.setSize(854, 480);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Paint r = new Paint();

JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());

JPanel p2 = new JPanel();
p2.setLayout(new GridLayout());

JPanel p3 = new JPanel();
p3.setLayout(new GridLayout (3, 1));

JButton b1 = new JButton("Salir");
b1.addActionListener(r);
b1.setActionCommand("EXIT");
p2.add(b1);
p1.add(p2, BorderLayout.NORTH);

b1 = new JButton("Reiniciar");
b1.addActionListener(r);
b1.setActionCommand("RESET");
p2.add(b1);
p1.add(p2, BorderLayout.NORTH);

JButton b2 = new JButton("Linea");
b2.addActionListener(r);
b2.setActionCommand("LINE");
p3.add(b2);
p1.add(p3, BorderLayout.EAST);

b2 = new JButton("Cuadrado");
b2.addActionListener(r);
b2.setActionCommand("SQUARE");
p3.add(b2);
p1.add(p3, BorderLayout.EAST);

b2 = new JButton("Elipse");
b2.addActionListener(r);
b2.setActionCommand("ELLIPSE");
p3.add(b2);
p1.add(p3, BorderLayout.WEST);

p1.add(r, BorderLayout.CENTER);

ventana.setContentPane(p1);
ventana.setVisible(true);
return;
}

private static final BasicStroke TIPO = new BasicStroke(3.0f);
private static final Color ACTUAL = Color.RED;
private static final Color GUARDADO = Color.BLACK;

public void paint(Graphics gr) {
if(this.linea) {
super.paint(gr);
Graphics2D g = (Graphics2D)gr;
int ancho = super.getWidth();
int altura = super.getHeight();
g.setStroke(Paint.TIPO);
Iterator i = this.lineas.iterator();
while (i.hasNext()) {
Linea l = i.next();
g.draw(new Line2D.Double(l.xs*ancho,
l.ys*altura,
l.xf*ancho,
l.yf*altura));
}
if (this.dibujando) {
g.setColor(Paint.ACTUAL);
g.draw(new Line2D.Double(this.startX*ancho,
this.startY*altura,
this.ahoraX*ancho,
this.ahoraY*altura));
}
return;
}
if(this.cuadro) {
super.paint(gr);
Graphics2D g = (Graphics2D)gr;
int ancho = super.getWidth();
int altura = super.getHeight();
g.setStroke(Paint.TIPO);
Iterator i = this.lineas.iterator();
while (i.hasNext()) {
Linea l = i.next();
g.draw(new Rectangle2D.Double(l.xs*ancho,
l.ys*altura,
l.xf*ancho,
l.yf*altura));
}
if (this.dibujando) {
g.setColor(Paint.ACTUAL);
g.draw(new Rectangle2D.Double(this.startX*ancho,
this.startY*altura,
this.ahoraX*ancho,
this.ahoraY*altura));
}
return;
}
if(this.circulo) {
super.paint(gr);
Graphics2D g = (Graphics2D)gr;
int ancho = super.getWidth();
int altura = super.getHeight();
g.setStroke(Paint.TIPO);
Iterator i = this.lineas.iterator();
while (i.hasNext()) {
Linea l = i.next();
g.draw(new Ellipse2D.Double(l.xs*ancho,
l.ys*altura,
l.xf*ancho,
l.yf*altura));
}
if (this.dibujando) {
g.setColor(Paint.ACTUAL);
g.draw(new Ellipse2D.Double(this.startX*ancho,
this.startY*altura,
this.ahoraX*ancho,
this.ahoraY*altura));
}
return;
}
}

public Paint() {
super();
super.setBackground(Color.WHITE);
this.dibujando = false;
this.lineas = new ArrayList();
this.startX = Paint.INVALIDO;
this.startY = Paint.INVALIDO;
this.ahoraX = Paint.INVALIDO;
this.ahoraY = Paint.INVALIDO;
this.addMouseListener(this);
this.addMouseMotionListener(this);
}

private static final double INVALIDO = -1.0;
private boolean dibujando;
private boolean linea;
private boolean cuadro;
private boolean circulo;
private double startX;
private double startY;
private double ahoraX;
private double ahoraY;
}


DESCARGA: Paint.java

jueves, 24 de junio de 2010

PRACTICA 2: Juegos con figuras


Hola a todos!
Para aplicar lo aprendido en la clase intente hacer un pequeno juego tipo PAC-MAN, solo que mas arcaico.
NO he podido implementar correctamente el codigo, aun tiene algunos errores, pero esto es lo que intento implementar:
" En la ventana se dibuja en circulo amarillo y la pantalla esta llena de pequenas pastillas, el juego termina cuando se toman todas las pastillas. "

Otro de mis objetivos es implementar RUNNABLE en el circulo amarillo para que se mueva solito ^_^

Este es el codigo fuente:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

public class Objeto extends JPanel implements KeyListener, ActionListener {

private double x;
private double y;
private double ancho;
private double altura;

private static final double PASO = 0.02;
private static final double CAMBIO = 0.01;
//private static final double MIN = 0.05;
//private static final double MAX = 0.95;

public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("SALIR")) {
System.exit(1);
} else if (cmd.equals("RESET")) {
this.repaint();
}
return;
}

private void dibujaObjeto(Graphics2D p, int ancho, int altura) {
p.setColor(Color.YELLOW);
p.fill(new Ellipse2D.Double(this.x*ancho,
this.y*altura,
this.ancho*ancho,
this.altura*altura));
return;
}

public void paint(Graphics g) {
double i, j;
super.paint(g);
g.setColor(Color.WHITE);
for(i=0.1; i<1.0; i+=0.1) {
for(j=1.0; j>=0.1; j-=0.1) {
((Graphics2D)g).fill(new Ellipse2D.Double(i*super.getWidth(),j*super.getHeight(),0.02*super.getWidth(),0.02*super.getHeight()));
}
}
this.dibujaObjeto((Graphics2D)g, super.getWidth(), super.getHeight());
return;
}

private void reset() {
this.x = 0.0;
this.y = 0.0;
this.ancho = 0.05;
this.altura = 0.05;
return;
}

public Objeto() {
super();
this.reset();
System.out.println("BIENVENIDO");
}

public void keyPressed(KeyEvent e) {
int c = e.getKeyCode();
switch (c) {
case KeyEvent.VK_DOWN:
this.y += Objeto.PASO;
break;
case KeyEvent.VK_UP:
this.y -= Objeto.PASO;
break;
case KeyEvent.VK_LEFT:
this.x -= Objeto.PASO;
break;
case KeyEvent.VK_RIGHT:
this.x += Objeto.PASO;
break;
}

if (this.x < 0) {
this.x = 0.0;
} else if (this.x > 0.9) {
this.x = 0.9;
}

if (this.y < 0) {
this.y = 0.0;
} else if (this.y > 0.9) {
this.y = 0.9;
}

super.repaint();
return;
}

public void keyReleased(KeyEvent e) {
return;
}

public void keyTyped(KeyEvent e) {
return;
}

public static void main (String[] args) {
JFrame ventana = new JFrame();
ventana.setTitle("Practica con Objetos 2D");
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setLocation(100, 200);
ventana.setSize(500, 500);

Objeto o = new Objeto();
o.setBackground(Color.BLACK);

JPanel p1 = new JPanel();
p1.setFocusable(true);
p1.setLayout(new BorderLayout());

JPanel p2 = new JPanel();
p2.setLayout(new GridLayout());

JButton b = new JButton("Reset");
b.setActionCommand("RESET");
b.addKeyListener(o);
b.addActionListener(o);
p2.add(b);
b = new JButton("Exit");
b.setActionCommand("SALIR");
p2.add(b);
b.addActionListener(o);

p1.addKeyListener(o);
p1.add(o, BorderLayout.CENTER);
p1.add(p2, BorderLayout.SOUTH);

ventana.setContentPane(p1);
ventana.setVisible(true);

return;
}
}


DESCARGA: Objeto.java

jueves, 17 de junio de 2010

PRACTICA 1: Botones



Este es mi primer programa en lenguaje Java.

Se trata de un codigo que muestra en pantalla una serie de botones, a cada boton le corresponde un numero del 1 al 9.
Cada boton realiza las siguientes acciones:
- Se le asigno un color a cada boton, al presionar determinado boton el recuadro al final cambia de acuerdo al color asignado.
- Cada boton tiene asignado un JLabel, el texto de la etiqueta muestra el nombre del numero en Frances.
- En la terminal se imprime el nombre del numero en Español.

A continuacion, el codigo Fuente:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Calculo implements ActionListener {
public void actionPerformed (ActionEvent e) {
String cmd = e.getActionCommand();
if(cmd.equals("uno")) {
System.out.print("uno\n");
this.miEtiqueta.setText("UN");
this.miPanel.setBackground(Color.RED);
}
if(cmd.equals("dos")) {
System.out.print("dos\n");
this.miEtiqueta.setText("DEUX");
this.miPanel.setBackground(Color.ORANGE);
}
if(cmd.equals("tres")) {
System.out.print("tres\n");
this.miEtiqueta.setText("TROIS");
this.miPanel.setBackground(Color.YELLOW);
}
if(cmd.equals("cuatro")) {
System.out.print("cuatro\n");
this.miEtiqueta.setText("QUATRE");
this.miPanel.setBackground(Color.GREEN);
}
if(cmd.equals("cinco")) {
System.out.print("cinco\n");
this.miEtiqueta.setText("CINQ");
this.miPanel.setBackground(Color.BLUE);
}
if(cmd.equals("seis")) {
System.out.print("seis\n");
this.miEtiqueta.setText("SIX");
this.miPanel.setBackground(Color.MAGENTA);
}
if(cmd.equals("siete")) {
System.out.print("siete\n");
this.miEtiqueta.setText("SEPT");
this.miPanel.setBackground(Color.BLACK);
}
if(cmd.equals("ocho")) {
System.out.print("ocho\n");
this.miPanel.setBackground(Color.GRAY);
this.miEtiqueta.setText("HUIT");
}
if(cmd.equals("nueve")) {
System.out.print("nueve\n");
this.miPanel.setBackground(Color.WHITE);
this.miEtiqueta.setText("NEUF");
}
if(cmd.equals("EX")) {
System.exit(1);
}
}

private JPanel miPanel;
private JLabel miEtiqueta;

public Calculo(JPanel p, JLabel l) {
this.miPanel = p;
this.miEtiqueta = l;
}

public static void main (String[] args) {
JFrame ventana = new JFrame();
ventana.setTitle ("Practica con Botones");
ventana.setSize (800,100);
ventana.setLocation (100,200);
ventana.setVisible (true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel1 = new JPanel();
JPanel fondo = new JPanel();
panel1.setLayout (new GridLayout());
fondo.setLayout (new GridLayout());
panel1.setBackground(Color.WHITE);

JLabel aviso = new JLabel();
Calculo yo = new Calculo(panel1, aviso);

JButton b1 = new JButton("1");
b1.addActionListener(yo);
b1.setActionCommand("uno");
panel1.add(b1);

JButton b2 = new JButton("2");
b2.addActionListener(yo);
b2.setActionCommand("dos");
panel1.add(b2);

JButton b3 = new JButton("3");
b3.addActionListener(yo);
b3.setActionCommand("tres");
panel1.add(b3);

JButton b4 = new JButton("4");
b4.addActionListener(yo);
b4.setActionCommand("cuatro");
panel1.add(b4);

JButton b5 = new JButton("5");
b5.addActionListener(yo);
b5.setActionCommand("cinco");
panel1.add(b5);

JButton b6 = new JButton("6");
b6.addActionListener(yo);
b6.setActionCommand("seis");
panel1.add(b6);

JButton b7 = new JButton("7");
b7.addActionListener(yo);
b7.setActionCommand("siete");
panel1.add(b7);

JButton b8 = new JButton("8");
b8.addActionListener(yo);
b8.setActionCommand("ocho");
panel1.add(b8);

JButton b9 = new JButton("9");
b9.addActionListener(yo);
b9.setActionCommand("nueve");
panel1.add(b9);

JButton salir = new JButton("X");
salir.addActionListener(yo);
salir.setActionCommand("EX");
panel1.add(salir);

panel1.add(aviso);

fondo.add(panel1);
ventana.setContentPane(fondo);

return;
}
}


DESCARGA :Calculo.java