Hola, uhmmmm hace tiempo que no actualizaba esto!, pero ya ven llegue con mas codigos y recargado :D. Bueno les contare un poco sobre este programita que no es la gran cosa, pero tiene su estilo, es un programa que acepta alguna palabra y verifica si pertenece a un Automata Finito Determinista agregado anteriormente con sus transiciones y estados inicial y finales. Aqui un screenshot con la ventana principal. En si el programa recive el estado inicial, y uno o mas estados finales. A continuacion vienen 3 JTextField que reciven las transiciones y se va creando una tabla dinamica al la derecha de la ventana con las transiciones y su simbolo asociado. Bueno este software esta escrito en Java usando listas enlazadas y todo, es bastante sencillo, mas que nada cabe destacar la interfaz grafica que le hice, quedo bonita, lo mejor es siempre hacer parecer lo menos posible a java. Saludos y aqui los ultimos screenshot. Descargar AFDTesterV1.0
Comentarios
// Calculadora.java
// Copyright (c) 1996, Agustin Froufe
// Todos los derechos reservados.
//
// No se asume ninguna responsabilidad por el uso o alteracion de este
// software. Este software se proporciona COMO ES, sin garantia de ningun
// tipo de su funcionamiento y en ningun caso sera el autor responsable de
// da�s o perjuicios que se deriven del mal uso del software, aun cuando
// este haya sido notificado de la posibilidad de dicho da�.
//
// Compilador: javac 1.0
// Autor: Agustin Froufe
// Creacion: 12-Sep-1996 15:39:38
//
//--------------------------------------------------------------------------
// Esta informacion no es necesariamente definitiva y est sujeta a cambios
// que pueden ser incorporados en cualquier momento, sin avisar.
//--------------------------------------------------------------------------
import java.awt.*;
import java.applet.Applet;
public class Calculadora extends Applet {
TextField pantallita;
public final int OP_NADA = 0;
public final int OP_SUMA = 1;
public final int OP_RESTA = 2;
public final int OP_MULT = 3;
public final int OP_DIV = 4;
public final int OP_IGUAL = 5;
public final int OP_BORRAR_C = 6;
public final int OP_BORRAR_AC = 7;
public final int PUNTO_DECIMAL = -1;
String cadDecimal;
int operador = OP_NADA;
boolean nuevoNumero = true;
boolean esDecimal = false;
double Total = 0.0;
boolean esConstante = false;
double numConstante = 0.0;
int opConstante = OP_NADA;
public void init() {
BotonCalculadora bot0,bot1,bot2,bot3,bot4,bot5,bot6,bot7,bot8,bot9;
BotonCalculadora botDecimal,botSuma,botResta;
BotonCalculadora botMult,botDiv,botIgual,botBorraC,botBorraAC;
// No utilizamos ningn la layout porque vamos a colocar
// los botones y el campo de texto para mostrar el resultado
// de las operaciones, en posiciones fijas
setLayout( null );
setFont( new Font( "Helvetica",Font.PLAIN,14 ) );
setBackground( new Color( 0x66,0xA2,0xD4 ) );
// Pintamos los botones de los numeros
bot0 = new BotonCalculadora( "0",OP_NADA,0 );
add( bot0 );
bot0.reshape( 8,144,96,24 );
bot1 = new BotonCalculadora( "1",OP_NADA,1 );
add( bot1 );
bot1.reshape( 8,112,40,24 );
bot2 = new BotonCalculadora( "2",OP_NADA,2 );
add( bot2 );
bot2.reshape( 64,112,40,24 );
bot3 = new BotonCalculadora( "3",OP_NADA,3 );
add( bot3 );
bot3.reshape( 120,112,40,24 );
bot4 = new BotonCalculadora( "4",OP_NADA,4 );
add( bot4 );
bot4.reshape( 8,80,40,24 );
bot5 = new BotonCalculadora( "5",OP_NADA,5 );
add( bot5 );
bot5.reshape( 64,80,40,24 );
bot6 = new BotonCalculadora( "6",OP_NADA,6 );
add( bot6 );
bot6.reshape( 120,80,40,24 );
bot7 = new BotonCalculadora( "7",OP_NADA,7 );
add( bot7 );
bot7.reshape( 8,48,40,24 );
bot8 = new BotonCalculadora( "8",OP_NADA,8 );
add( bot8 );
bot8.reshape( 64,48,40,24 );
bot9 = new BotonCalculadora( "9",OP_NADA,9 );
add( bot9 );
bot9.reshape( 120,48,40,24 );
// Pintamos los botones que nos van a permitir realizar las
// operaciones soportadas poe esta mini-calculadora
botDecimal = new BotonCalculadora( "",OP_NADA,PUNTO_DECIMAL );
add( botDecimal );
botDecimal.reshape( 120,144,40,24 );
botSuma = new BotonCalculadora( "+",OP_SUMA,0 );
add( botSuma );
botSuma.reshape( 176,112,40,56 );
botResta = new BotonCalculadora( "-",OP_RESTA,0 );
add( botResta );
botResta.reshape( 232,112,40,24 );
botMult = new BotonCalculadora( "*",OP_MULT,0 );
add( botMult );
botMult.reshape( 176,80,40,24 );
botDiv = new BotonCalculadora( "/",OP_DIV, 0);
add( botDiv );
botDiv.reshape( 176,48,40,24 );
botIgual = new BotonCalculadora( "=",OP_IGUAL,0 );
add( botIgual );
botIgual.reshape( 232,144,40,24 );
botBorraC = new BotonCalculadora( "C",OP_BORRAR_C,0 );
add( botBorraC );
botBorraC.reshape( 232,48,40,24 );
botBorraAC = new BotonCalculadora( "AC",OP_BORRAR_AC,0 );
add( botBorraAC );
botBorraAC.reshape( 232,80,40,24 );
// Pintamos el campo de texto en que vamos a reflejar lo que se
// se va introduciendo y el resultado de las operaciones
pantallita = new TextField( "0",80 );
pantallita.setEditable( false );
add( pantallita );
pantallita.reshape( 48,8,184,31 );
String unaDecima = ( new Double(0.1) ).toString();
cadDecimal =
unaDecima.substring( unaDecima.length()-2 ).substring( 0,1 );
}
public static void main( String args[] ) {
Frame f = new Frame( "Calculadora Java" );
Calculadora c = new Calculadora();
c.init();
f.add( "Center",c );
f.pack();
f.resize( 395,181 );
f.show();
}
public void anadir( int valor ) {
String digito;
// Controlamos el punto decimal, para que si es lo primero que se
// pulsa, desplazar un cero a la izquierda, y si se pulsa cuando
// ya estamos en un numero decimal, no hacerle caso
if( valor == PUNTO_DECIMAL )
if( !esDecimal )
{
if( nuevoNumero )
{
pantallita.setText( "0" );
nuevoNumero = false;
}
esDecimal = true;
digito = cadDecimal;
}
else
return;
else
digito = ( new Integer(valor) ).toString();
// Si tenemos que presentar un numero nuevo, porque estemos ya en
// otra operacion, borramos antes la pantallaita
if( nuevoNumero )
{
pantallita.setText( digito );
if( valor != 0 )
nuevoNumero = false;
}
else
pantallita.setText( pantallita.getText() + digito );
repaint();
}
// Ejecuta la operacion que indica el operador del boton que se
// haya pulsado
public void haceOperacion( int nuevoOperador ) {
double numero;
numero = ( new Double( pantallita.getText() ) ).doubleValue();
switch( nuevoOperador )
{
case OP_SUMA:
case OP_RESTA:
case OP_MULT:
case OP_DIV:
if( nuevoNumero )
{
if( nuevoOperador == operador && !esConstante )
{
esConstante = true;
numConstante = numero;
opConstante = nuevoOperador;
}
else
esConstante = false;
}
else
esConstante = false;
case OP_IGUAL:
if( !nuevoNumero || esOperadorIgual( nuevoOperador ) )
{
if( esConstante )
{
Total = numConstante;
operador = opConstante;
}
// Controla los operadores de operaciones
// matematicas
switch( operador )
{
case OP_SUMA:
Total = Total + numero;
break;
case OP_RESTA:
Total = Total - numero;
break;
case OP_MULT:
Total = Total * numero;
break;
case OP_DIV:
Total = Total / numero;
break;
case OP_IGUAL:
case OP_NADA:
Total = numero;
break;
}
// Presenta el resultado del tecleo en la pantalla
pantallita.setText(( new Double(Total) ).toString());
}
operador = nuevoOperador;
nuevoNumero = true;
esDecimal = false;
break;
}
// Controla los operadores de borrado tanto el Clear como el
// AllClear
switch( nuevoOperador )
{
// Borra el numero y cancela la operacion en curso
// solamente
case OP_BORRAR_C:
numero = 0.0;
pantallita.setText( "0" );
if( esOperadorIgual( operador ) )
Total = numero;
nuevoNumero = true;
esDecimal = false;
break;
// Borra todas las operaciones y numeros, lo deja
// todo a cero
case OP_BORRAR_AC:
pantallita.setText( "0" );
operador = OP_NADA;
nuevoNumero = true;
esDecimal = false;
Total = 0.0;
esConstante = false;
break;
}
}
// Comprueba si es el operador igual, para presentar resultado
protected boolean esOperadorIgual( int oper ) {
return( oper == OP_IGUAL );
}
}
// Esta clase se utiliza para pintar cada uno de los botones que van
// a conformar la calculadora
class BotonCalculadora extends Button {
int operador;
int bvalor;
BotonCalculadora( String texto, int oper, int valor ) {
super( texto );
operador = oper;
bvalor = valor;
}
public boolean action( Event evt, Object arg ) {
Calculadora par = ( Calculadora )getParent();
// Si no se tiene ninguna operacion matematica asociada, solamente
// se a�de el numero a la pantallita, y si ya es una
// operacion, entonces se hace y se presenta el resultado
if( operador == par.OP_NADA )
par.anadir( bvalor );
else
par.haceOperacion( operador );
return( true );
}
}
//--------------------------------------- Final del fichero Calculadora.java
quien me podria ayudar?? soy nuevo en java.
mi correo es sergio_cg82@hotmail.com
--------------------------------------
/*
* Ventana.java
*
* Created on 12 de noviembre de 2007, 12:07 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
import java.awt.*;
import java.awt.event.*;
/**
*
* @author Amey/CAC
*/
public class Ventana {
//Defino los objetos a utilizar en la construccion de la ventana
//Defino las variables a utilizar en los distintos calculos matematicos
private Frame frm;
private Panel p1,p2,p3,p4,p5,p6;
public TextField tf1;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bsuma,
bresta,bdivi,bmulti,bac,bigual,bpt,bmm,bsen,
bcos, btan, braiz, blog, bpot;
private Checkbox cb1,cb2;
private CheckboxGroup cbg;
double valor1;
double valor2;
double resultado;
int operador;
int cuenta=0;
int cuenta1=0;
double mm=0;
public void CrearVentana(){
p1=new Panel();
p2=new Panel();
p3=new Panel();
p4=new Panel();
p5=new Panel();
p6=new Panel();
tf1=new TextField (25);
tf1.setEditable(true);
b1=new Button("1");
b2=new Button("2");
b3=new Button("3");
b4=new Button("4");
b5=new Button("5");
b6=new Button("6");
b7=new Button("7");
b8=new Button("8");
b9=new Button("9");
b0=new Button("0");
bpt=new Button(".");
bmm=new Button("+/-");
bsen=new Button("sen");
bcos=new Button("cos");
btan=new Button("tan");
braiz=new Button("Rz");
blog=new Button("log");
bpot=new Button("x*Y");
bsuma=new Button("+");
bsuma.setEnabled(true);
bresta=new Button("-");
bresta.setEnabled(true);
bdivi=new Button("%");
bdivi.setEnabled(true);
bmulti=new Button("x");
bmulti.setEnabled(true);
bac=new Button("AC");
bac.setEnabled(true);
bac.setForeground(Color.red);
bigual=new Button("ENTER");
bigual.setEnabled(true);
cbg=new CheckboxGroup();
cb1=new Checkbox ("Comun", cbg, true);
cb2=new Checkbox ("Cientifica", cbg, false);
p1.setLayout(new FlowLayout());
p2.setLayout(new FlowLayout());
p3.setLayout(new GridLayout(4,3));
p4.setLayout(new GridLayout(4,0));
p6.setLayout(new GridLayout(2,3));
p2.add(tf1);
p3.add(b1);
p3.add(b2);
p3.add(b3);
p3.add(b4);
p3.add(b5);
p3.add(b6);
p3.add(b7);
p3.add(b8);
p3.add(b9);
p3.add(bpt);
p3.add(b0);
p3.add(bmm);
p4.add(bsuma);
p4.add(bresta);
p4.add(bdivi);
p4.add(bmulti);
p4.add(bac);
p4.add(bigual);
p5.add(cb1);
p5.add(cb2);
p6.add(bsen);
p6.add(bcos);
p6.add(btan);
p6.add(braiz);
p6.add(blog);
p6.add(bpot);
p1.add(p2);
p1.add(p3);
p1.add(p4);
p1.add(p5);
frm.add(p1);
//Agrego a la ventana el metodo para cerrarla
frm.addWindowListener(new ManejadorVentana());
//Agrego los manejadores de los botones de teclado
b1.addActionListener(new Mb1());
b2.addActionListener(new Mb2());
b3.addActionListener(new Mb3());
b4.addActionListener(new Mb4());
b5.addActionListener(new Mb5());
b6.addActionListener(new Mb6());
b7.addActionListener(new Mb7());
b8.addActionListener(new Mb8());
b9.addActionListener(new Mb9());
b0.addActionListener(new Mb0());
//Agrego los manejadores de los botones de operaciones
bsuma.addActionListener(new MSuma());
bresta.addActionListener(new MResta());
bmulti.addActionListener(new MMulti());
bdivi.addActionListener(new MDivi());
bigual.addActionListener(new MIgual());
bac.addActionListener(new MAC());
bpt.addActionListener(new MPT());
bmm.addActionListener(new MMM());
cb1.addItemListener( new MCB());
cb2.addItemListener( new MCB());
bsen.addActionListener(new Msen());
bcos.addActionListener(new Mcos());
btan.addActionListener(new Mtan());
braiz.addActionListener(new Mraiz());
blog.addActionListener(new Mlog());
bpot.addActionListener(new Mpot());
}
//Construccion de la ventana
public Ventana() {
VentanaComun();
}
public void VentanaComun(){
frm=new Frame ("Amey`s Calc 2.0.1/CAC");
frm.setBounds(200,200,220,220);
frm.setResizable(false);
CrearVentana();
frm.setVisible(true);
}
public void VentanaCientifica() {
frm=new Frame ("Amey`s Calc 2.0.1/CAC");
frm.setBounds(200,200,220,265);
frm.setResizable(false);
CrearVentana();
cb2.setState(true);
p1.add(p6);
frm.setVisible(true);
}
//Apreto un boton, lo pasa al TextField!
public void ApretoBoton (int botonApretado){
if (cuenta==1){
tf1.setText("");
cuenta=0;
}
if (cuenta1==1){
cuenta1=2;
}
tf1.setText(tf1.getText()+ botonApretado);
}
public void ApretoIgual (){
valor2=Double.parseDouble(tf1.getText());
switch(operador){
case 1:
resultado=valor1+valor2;
tf1.setText(Double.toString(resultado));
break;
case 2:
resultado=valor1-valor2;
tf1.setText(Double.toString(resultado));
break;
case 3:
resultado=valor1*valor2;
tf1.setText(Double.toString(resultado));
break;
case 4:
if (valor2==0){
tf1.setText("Volve a la escuela!!!") ;
}
else{
resultado=valor1/valor2;
tf1.setText(Double.toString(resultado));
}
break;
}
cuenta=1;
}
public void Cuentas(int op){
if (cuenta1==0){
cuenta1=1;
}
if (cuenta1==2){
ApretoIgual();
cuenta1=1;
}
valor1=Double.parseDouble(tf1.getText());
operador=op;
cuenta=1;
}
public void Trigo (int op){
switch (op){
case 5:
tf1.setText(Double.toString(Math.sin(Math.toRadians(Double.parseDouble(tf1.getText())))));
cuenta=1;
break;
case 6:
tf1.setText(Double.toString(Math.cos(Math.toRadians(Double.parseDouble(tf1.getText())))));
cuenta=1;
break;
case 7:
tf1.setText(Double.toString(Math.tan(Math.toRadians(Double.parseDouble(tf1.getText())))));
cuenta=1;
break;
case 8:
if ((Double.parseDouble(tf1.getText())<=0)){
tf1.setText("Volve a la escuela!!!");
}
else{
tf1.setText(Double.toString(Math.sqrt(Double.parseDouble(tf1.getText()))));
}
cuenta=1;
break;
case 9:
tf1.setText(Double.toString(Math.log10(Double.parseDouble(tf1.getText()))));
cuenta=1;
break;
case 10:
tf1.setText(Double.toString(Math.pow(valor1, valor2)));
cuenta=1;
break;
}
}
//Clases manejadoras de los eventos de teclado
private class Mb1 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (1);
}
}
private class Mb2 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (2);
}
}
private class Mb3 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (3);
}
}
private class Mb4 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (4);
}
}
private class Mb5 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (5);
}
}
private class Mb6 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (6);
}
}
private class Mb7 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (7);
}
}
private class Mb8 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (8);
}
}
private class Mb9 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (9);
}
}
private class Mb0 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (0);
}
}
//Clases manejadoras de las distintas operaciones
private class ManejadorVentana extends WindowAdapter{
public void windowClosing (WindowEvent e){
frm.dispose();
System.exit(0);
}
}
private class MSuma implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas(1);
}
}
private class MResta implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas(2);
}
}
private class MMulti implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas(3);
}
}
private class MDivi implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas (4);
}
}
private class Msen implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (5);
}
}
private class Mcos implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (6);
}
}
private class Mtan implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (7);
}
}
private class Mraiz implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (8);
}
}
private class Mlog implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (9);
}
}
private class Mpot implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (10);
}
}
private class MIgual implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoIgual ();
}
}
private class MAC implements ActionListener{
public void actionPerformed (ActionEvent e){
valor1=0;
valor2=0;
resultado=0;
tf1.setText("");
cuenta=1;
}
}
private class MPT implements ActionListener{
public void actionPerformed (ActionEvent e){
tf1.setText(tf1.getText()+ ".");
}
}
private class MMM implements ActionListener{
public void actionPerformed (ActionEvent e){
mm=Double.parseDouble(tf1.getText());
tf1.setText(Double.toString(mm*(-1)));
}
}
private class MCB implements ItemListener{
public void itemStateChanged( ItemEvent e ){
Checkbox aux = cbg.getSelectedCheckbox();
if (aux.getLabel()=="Cientifica"){
frm.dispose();
VentanaCientifica();
}
else {
frm.dispose();
VentanaComun();
}
}
}
}
Y gracias Amey por subir tu calculadora, la echare correr hoy para ver que tal =).
Saludos sigan visitando, se vienen mas actualizaciones.