Junio 18, 2018, 11:36:43 am

Autor Tema: Mi primer programa en java  (Leído 1741 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Mi primer programa en java
« en: Agosto 30, 2014, 02:05:51 pm »
Bueno estoy a punto de empezar el curso de análisis y diseño de algoritmos I el 5 de sep., en el que principalmente trabajaremos con java, así que me he puesto a investigar un poco acerca de java y para estar empapado del lenguaje he hecho esta primera aplicación (que en realidad no tiene ninguna ciencia en sí)

Se trata de un "creador" de sólidos, probablemente tenga algún bug que descubriré cuando empiece a darle algún uso. Entras y aparece una ventanita en la que le das click al espacio de dibujo para situar puntos, empezando por el centro de masa, luego se hace click para añadir vértices al polígono, posteriormente si se quiere se puede añadir un punto fijo (por ejemplo que el objeto tenga un pivote respecto al cual girar). Ah no lo he mencionado, la idea era crear sólidos polígonales.

El objetivo es hacer por lo pronto un simulador muy simplista en el que se puedan colocar solidos creados por esta aplicación. Dado que se tiene el centro de masa se pueden calcular momentos de inercia partiendo el polígono convexo en un conjunto de triágulos. Obviamente esto tiene algunas implicaciones teóricas, por ejemplo dado que el polígono rara vez sería regular y en tal caso el CM rara vez estaría en el centro geométrico implicaría que el sólido bidimensional en cuestión no tiene densidad constante... Pero bueno, ire viendo estas cuestiones sobre la marcha. Por lo pronto les dejo ésto.

La masa, y los puntos son guardados en un archivo de texto que se sitúa en el mismo directorio de la aplicación. Ah, y los puntos son guardados respecto al centro de masa, como vectores en 2D

Acepto sugerencias y críticas, es mas, las busco.  :)

Screenshot


MainWindow.java (contiene el main)
Código: (java) You are not allowed to view links. Register or Login
package Main;
import javax.swing.JFrame;
import Manager.AppManager;

public class MainWindow {

public MainWindow() {

}

/**
* @param args
*/
public static void main(String[] args) {
JFrame window = new JFrame("Solid Creator");

AppManager am = new AppManager();
window.setContentPane(new MainPanel(am) );
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
window.setResizable(false);
window.setBounds(300, 150, 500, 450);
window.setVisible(true);



}

}


MainPanel.java (contiene components de la ventana y maneja los eventos de la misma)
Código: (java) You are not allowed to view links. Register or Login
package Main;
import javax.swing.*;

import Manager.AppManager;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import Modelo.Solido;




public class MainPanel extends JPanel implements ActionListener, MouseListener {

private static final long serialVersionUID = 1L;
private AppManager am;
private boolean first;
private boolean creatingFixed;

private JPanel paint;
private JButton crearPtoRotacion;
private JButton eliminarPtoRotacion;
private JButton limpiar;
private JButton guardar;
private JLabel estado;

private JTextField nombre;
private JTextField masa;




public MainPanel(AppManager am) {
super();
this.first=true;
this.creatingFixed=false;
this.am = am;
setPreferredSize( new Dimension(500, 450));
setLayout(new BoxLayout( this, BoxLayout.Y_AXIS));
this.paint = new JPanel();
JPanel options = new JPanel();
add(paint);
add(options);

paint.setPreferredSize( new Dimension(400, 300) );
options.setPreferredSize( new Dimension( 400, 150 ) );


estado = new JLabel( "Haga click para situar centro de masa", JLabel.CENTER );
estado.setPreferredSize( new Dimension( 500, 50 ) );

crearPtoRotacion = new JButton( "Punto rotacional" );
eliminarPtoRotacion = new JButton( "Borrar punto rotacional" );
guardar = new JButton( "Guardar objeto!" );
limpiar = new JButton( "Deshacer todo" );
nombre = new JTextField("Nombre");
masa = new JTextField("Masa");
nombre.setPreferredSize( new Dimension(100, 25) );
masa.setPreferredSize( new Dimension(100, 25) );

options.add(estado);
options.add(crearPtoRotacion );
options.add(eliminarPtoRotacion );
options.add(limpiar);
options.add(nombre);
options.add(masa);
options.add(guardar);


crearPtoRotacion.addActionListener(this);
eliminarPtoRotacion.addActionListener(this);
limpiar.addActionListener(this);
guardar.addActionListener(this);
paint.addMouseListener(this);


paint.requestFocus();



}

public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
if ( this.first == true )
{
this.am.setCMtoSolid( (float) e.getX(), (float) e.getY());
this.first=false;
} else if (creatingFixed) {
this.am.setFixed( (float) e.getX(), (float) e.getY());
creatingFixed = false;
} else {

this.am.addPoint( (float) e.getX(), (float) e.getY());


}
UpdateLabel("");
this.PaintComponent(paint.getGraphics());

}

public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent e) {


}

public void mouseReleased(MouseEvent e) {


}

public void actionPerformed(ActionEvent e) {
String message = new String();
if (e.getSource().equals(limpiar))
{
this.am.ClearSolid();
first=true;
System.out.println("asd");

} else if( e.getSource().equals(crearPtoRotacion) )
{
if( first == true )
{
message = "Primero debe situar el centro de masa";
} else {
creatingFixed=true;
}
} else if( e.getSource().equals(eliminarPtoRotacion) )
{
am.deleteFixed();

} else if( e.getSource().equals(guardar) )
{
boolean a = am.guardar( nombre.getText(), masa.getText() );
if ( a == true )
{
message = "Guardado con exito";
} else {
message = "Hubo un error guardando";
}

}

UpdateLabel(message);


this.PaintComponent(paint.getGraphics());


}

public void UpdateLabel(String m)
{
if ( m.isEmpty() )
{
if (first == true)
{
estado.setText("Haga click para situar centro de masa");
} else if ( creatingFixed==false )
{
estado.setText("Haga click para situar situar un punto del polígono");
} else {
estado.setText("Haga click para situar situar un punto fijo de rotacion");
}
} else
{
estado.setText(m);
}

}

private void PaintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g.clearRect(0, 0, paint.getWidth(), paint.getHeight());
if (first!=true) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
Solido current = this.am.getSolido();

g2.setColor(Color.BLUE);
Shape centro = new Ellipse2D.Float( (float)current.getCM().getX(), (float)current.getCM().getY(), 10, 10  );
g2.fill(centro);

for ( int i=1; i<current.getNumPuntos(); i++)
{
g2.setColor(Color.BLACK);

g2.drawLine(
(int)current.getPunto(i-1).getX(),
(int)current.getPunto(i-1).getY(),
(int)current.getPunto(i).getX(),
(int)current.getPunto(i).getY());
centro = new Ellipse2D.Float( (float)current.getPunto(i-1).getX()-2, (float)current.getPunto(i-1).getY()-2, 4, 4  );
g2.fill(centro);

}

if (current.hasFixed())
{
g2.setColor(Color.RED);
centro = new Ellipse2D.Float( (float)current.getFixed().getX()-2, (float)current.getFixed().getY()-2, 4, 4  );
g2.fill(centro);
}
}
}




}

AppManager.java (se encarga de trabajar con los datos pasados por el panel para el sólido y de guardar el polígono en el archivo de texto)
Código: (java) You are not allowed to view links. Register or Login
package Manager;
import Modelo.Solido;

import java.awt.geom.Point2D;
import java.io.File;
import java.io.BufferedWriter;
import java.io.FileWriter;


public class AppManager {

private Solido creatingSolid;

public AppManager() {
this.creatingSolid = new Solido();
}


public void setCMtoSolid( float x, float y )
{
this.creatingSolid.setCenterOfMass( x, y );


}

public void addPoint( float x, float y )
{
Point2D relative = new Point2D.Float(x, y);
this.creatingSolid.addPoint( relative );

}

public void setFixed( float x, float y )
{
this.creatingSolid.setFixed( x, y );

}

public Solido getSolido()
{
return this.creatingSolid;
}
public void ClearSolid()
{
this.creatingSolid.ClearAll();
}
public void deleteFixed()
{
creatingSolid.deleteFixed();
}

public boolean guardar(String name, String masa)
{

try{

File archivo = new File(name + ".txt");
BufferedWriter escribo = new BufferedWriter( new FileWriter( archivo ) );
escribo.write(masa);
escribo.newLine();
escribo.write( (int)creatingSolid.getCM().getX() + " " +  (int)creatingSolid.getCM().getY() );
escribo.newLine();
escribo.write( (int)creatingSolid.getFixed().getX() + " " +  (int)creatingSolid.getFixed().getY() );

for ( int i=0; i<creatingSolid.getNumPuntos(); i++)
{
escribo.newLine();
escribo.write( (int)creatingSolid.getPunto(i).getX() + " "+  (int)creatingSolid.getPunto(i).getY());
}

escribo.close();

} catch(Exception e)
{
e.printStackTrace();
return false;
}
return true;
}


}

Y finalmente Solido.java que es la plantilla objeto del polígono
Código: (java) You are not allowed to view links. Register or Login
package Modelo;

import java.awt.geom.Point2D;

import java.util.ArrayList;

public class Solido {

ArrayList<Point2D> puntos;
Point2D cm_pos;
Point2D fixed;




public Solido() {
// TODO Auto-generated constructor stub
puntos = new ArrayList<Point2D>();
cm_pos=new Point2D.Float();
fixed=new Point2D.Float();


}

public void setCenterOfMass( float x, float y )
{
this.cm_pos = new Point2D.Float( x, y );

}

public void addPoint( Point2D absolute_pos )
{
Point2D relative_pos = new Point2D.Float();
relative_pos.setLocation(
absolute_pos.getX() - this.cm_pos.getX(),
absolute_pos.getY() - this.cm_pos.getY()
);
puntos.add( relative_pos );


}
public int getNumPuntos()
{
return this.puntos.size();
}

public Point2D getCM()
{
Point2D j = new Point2D.Float(
(float)this.cm_pos.getX() ,
(float)this.cm_pos.getY()
);
return j;
}

public Point2D getPunto(int index)
{
Point2D j = new Point2D.Float(
(float)this.puntos.get(index).getX() + (float)this.cm_pos.getX() ,
(float)this.puntos.get(index).getY() + (float)this.cm_pos.getY()
);
return j;
}
public void ClearAll()
{
this.puntos.clear();
this.cm_pos=new Point2D.Float();
fixed.setLocation(0, 0);
}
public boolean hasFixed()
{
if (fixed.getX() != 0 && fixed.getY()!= 0)
{
return true;
}
else
{
return false;
}

}
public Point2D getFixed()
{
Point2D absolute_pos = new Point2D.Float(
(float)fixed.getX() + (float)cm_pos.getX(),
(float)fixed.getY() + (float)cm_pos.getY()
);
return absolute_pos;
}

public void setFixed( float x, float y)
{
Point2D relative_pos = new Point2D.Float();
relative_pos.setLocation(
x - this.cm_pos.getX(),
y - this.cm_pos.getY()
);
this.fixed = relative_pos;
}
public void deleteFixed()
{
fixed.setLocation(0, 0);
}
}

Saludos!
« Última modificación: Agosto 30, 2014, 02:08:28 pm por carlmycol »
Pregúntate: ¿Qué estás dispuesto a sacrificar por alcanzar tus objetivos?

Desconectado Kreusser

  • Moderador
  • *****
  • Mensajes: 893
  • Sexo: Masculino
  • Hard programming
    • Ver Perfil
    • :~#
Re:Mi primer programa en java
« Respuesta #1 en: ſeptiembre 04, 2014, 03:11:31 pm »
Me gusta!
buen aporte..
Saludos

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re:Mi primer programa en java
« Respuesta #2 en: ſeptiembre 11, 2014, 06:33:02 am »
Gracias kreusser ahorita me encuentro haciendo las tareas de algoritmos I en java y tengo unosproblemillas mas que todo en cuanto a los algoritmos, preguntaré por la sección de programación general y cuando estén listos los aporto por acá. Hay algo acerca de la simulación de Monte Carlo

Saludos!


xx
[Radios online] Mi primer programa en java

Iniciado por klaine

4 Respuestas
3535 Vistas
Último mensaje Marzo 14, 2012, 10:28:26 pm
por klaine
xx
Mí primer Java

Iniciado por Ike Array

4 Respuestas
2118 Vistas
Último mensaje Febrero 18, 2012, 07:26:46 am
por BigBear
xx
Java como primer lenguaje.

Iniciado por bolanta48

6 Respuestas
2667 Vistas
Último mensaje Febrero 19, 2010, 12:44:18 am
por WaesWaes
exclamation
El lenguaje C desbanca a Java del primer puesto

Iniciado por cemasmas

30 Respuestas
6580 Vistas
Último mensaje Abril 11, 2012, 05:33:42 am
por shitoman
question
pequeña ayuda con un programa de java. El programa ya esta completo solo me falt

Iniciado por scold

2 Respuestas
1878 Vistas
Último mensaje Julio 30, 2009, 01:42:52 pm
por scold
exclamation
Mi primer programa !

Iniciado por Cortmatgol

12 Respuestas
3212 Vistas
Último mensaje Abril 26, 2012, 02:10:16 pm
por Cortmatgol
question
mi primer programa en c :)

Iniciado por daryo

6 Respuestas
2507 Vistas
Último mensaje Marzo 23, 2010, 01:18:48 pm
por cibergolen
xx
mi primer programa

Iniciado por naxoitc

6 Respuestas
2589 Vistas
Último mensaje Julio 05, 2007, 05:12:46 am
por Ther0x
xx
Mi primer programa (101% mio) en C !!!

Iniciado por Draco_X

17 Respuestas
7930 Vistas
Último mensaje Agosto 10, 2007, 06:09:45 pm
por DarkIker
xx
Primer Programa.

Iniciado por JaAViEr

6 Respuestas
2380 Vistas
Último mensaje Mayo 03, 2009, 07:35:29 am
por .xAk.