Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] ¿Consejos para programar en java? Aplicaciones de escritorio.

Estas en el tema de ¿Consejos para programar en java? Aplicaciones de escritorio. en el foro de Java en Foros del Web. Hola a todos, necesito empezar a crear aplicaciones en java (escritorio). Tengo experiencia en otros lenguajes. .net vb y c#, entre otros. En java tengo ...
  #1 (permalink)  
Antiguo 25/04/2013, 02:09
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 18 años, 1 mes
Puntos: 2
¿Consejos para programar en java? Aplicaciones de escritorio.

Hola a todos, necesito empezar a crear aplicaciones en java (escritorio).

Tengo experiencia en otros lenguajes. .net vb y c#, entre otros.

En java tengo conocimientos y en general me apaño bien con los objetos, funciones y demás, pero me esta costando mucho los JFrame.

Uso eclipse y swing. Utilizo el Diseñador(Design) para crear algunos componentes, como por ejemplo un botón, una lista, etc...
El problema principal es el acceso a esos componentes, acostumbrado al "Me.listbox.items" o "This.listbox.items" de .net me vuelvo medio lelo para acceder de manera similar en java. Me ocurre con todos los componentes, label, buton, textbox, ...

Voy encontrando algo de información mediante ejemplos y demás como declarar la lista de manera global en la clase y demas.

Lo que me gustaría es algunas webs o algún tutorial para los que venimos de programar en .net. Lo que encuentro es bastante confuso y generalmente para cosas puntuales yo buscaba algo más general. Sobre todo orientado a la gestión de los componentes y sus propiedades, como modificar el texto o modificar posicion, elementos de una lista, bla bla bla.

Saludos y gracias.
  #2 (permalink)  
Antiguo 25/04/2013, 02:17
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Lo que pasa es que en .Net los atributos suelen ser publicos y son accesibles directamente.

En java, para prevenir accesos no deseados, lo que se suele hacer es que los atributos sean privados (sólo visibles dentro de la misma clase) y acceder a ellos mediante sus get y set correspondientes. Eso no quiere decir que no se pueda hacer como .Net (si defines un atributo como público por ejemplo), simplemente que no es recomendable.

Así, tendrás algo como: objeto.getListBox().getItems();

El operador this quedaría reservado para referenciar un objeto de la clase en la que se encuentra.

Así si tienes una clase ClassX, si dentro del código de esa clase te encuentras con un this.metodo(), ese this hará referencia al objeto ClassX que esté instanciado cuando se esté ejecutando ese código.

Otra diferencia con .Net es en los operadores de comparación, para los tipos primitivos sigue siendo ==, mientras que para los Objetos se utiliza el método equals => obj1.equals(obj2), que compara la clase del objeto y su valor.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 25/04/2013, 02:32
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Fuzzylog gracias por los consejos.


Creo que el principal problema que me encuentro es el acceso a las propiedades, que como bien dices son privadas.

Por ejemplo, imaginemos un jframe que contenga un label llamado "label1".

¿Como accedo a este objeto desde una función?, incluso desde la misma clase no me aclaro.
Lo que hago es declarar su valor de texto de manera global. Por ejempo "String texto"; y asociarsela en el punto el que la clase crea y añade el label al Frame. Después desde una función cambio el valor de "texto".

Lo que no se es si desde dentro de una función se puede acceder al objeto "label1" en sí, y poder cambiarle la posición, texto etc...
Algo asi en plan "frame.label1.setText"
  #4 (permalink)  
Antiguo 25/04/2013, 02:53
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Si alguien quiere que una variable sea accesible, tiene varias opciones.

Ej1) Ficheros de constantes: Sería una clase pública con esta estructura
public Class Constants {
public static TipoDato1 NOMBRE_VARIABLE1 = valorVariable1;
public static TipoDato2 NOMBRE_VARIABLE2 = valorVariable2;
...
}
La forma de obtener estas constantes sería
TipoDato1 constante1 = Constants.NOMBRE_VARIABLE1;

Igual es necesario hacer el import de la clase Constants a la clase desde donde se llame dependiendo de donde esté, en eclipse importa y ordena automaticamente con CTRL+SHIFT+O

Cambia TipoDato1 por String o cualquier otro tipo de dato y ya tendrás un fichero funcional.

Forma tradicional
public Class MiClase {

private TipoDato1 variable1;

public TipoDato1 getVariable1() {
return this.variable1;
}

public void setVariable1(TipoDato1 variable1) {
this.variable1 = variable1;
}

}

Ahora cuando quieres recuperar ese valor tienes que hacer
MiClase objetoDeMiClase = new MiClase();
//Como ahora mismo variable1 no tendría valor (hay otros casos en los que puede tener un valor por defecto o tener un Constructor que ya le pasa los valores de los atributos)
//Vamos a utilizar el setter para darle un valor
TipoDato1 miVariable1 = valorVariableTipoDato1;
objetoDeMiClase.setVariable1(miVariable1);
//Recuperamos el valor
TipoDato1 miVariable1recuperada = objetoDeMiClase.getVariable1();
// ahora tendras miVariable1 == miVariable1recuperada

Hay otros modificadores de visibilidad que permiten accesos directos (protected para las clases derivadas y default para el package en el que se encuentra la clase) pero en general funciona de una de estas dos maneras.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 25/04/2013, 03:35
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Gracias de nuevo Fuzzylog.

A ver si me explico mejor, en cuanto a visibilidad y accesibilidad de funciones y datos no me resulta demasiado complejo ya que se parece a c# aunque tiene sus diferencias y el ejemplo que pones esta bien para entender algunas cosas.

Mi problema principal es el acceso , aun dentro de la misma clase.
Te pongo un jframe básico de prueba que tengo.

Código PHP:
package testUI;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class 
TestFrame {

    private 
JFrame frame;

    
/**
     * Launch the application.
     */
    
public static void main(String[] args) {
        
EventQueue.invokeLater(new Runnable() {
            public 
void run() {
                try {
                    
TestFrame window = new TestFrame();
                    
window.frame.setVisible(true);
                } catch (
Exception e) {
                    
e.printStackTrace();
                }
            }
        });
    }

    
/**
     * Create the application.
     */
    
public TestFrame() {
        
initialize();
    }

    
/**
     * Initialize the contents of the frame.
     */
    
private void initialize() {
        
frame = new JFrame();
        
frame.setBounds(100100450300);
        
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
frame.getContentPane().setLayout(null);
        
        
JButton btnBoton1 = new JButton("Boton de prueba");
        
btnBoton1.addMouseListener(new MouseAdapter() {
            @
Override
            
public void mouseClicked(MouseEvent arg0) {
                          
btClick();
            }
        });
        
btnBoton1.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent arg0) {
            }
        });
        
btnBoton1.setBounds(13718816423);
        
frame.getContentPane().add(btnBoton1);
        
        
JLabel lblLabel1 = new JLabel("Texto de prueba");
        
lblLabel1.setBounds(977820414);
        
frame.getContentPane().add(lblLabel1);
    }
    
    
void btClick(){
        
//Cambiar el texto de lblLabel1
    
    
}
    

Está creado directamente con el design en eclipse.
Tiene un botón, "btnBoton1" y un label "lblLabel1".
Añado la función "void btClick()" al botón "btnBoton1".
Mi duda es , desde esta función, cual sería la mejor forma (o la manera mas correcta) de acceder a "lblLabel1". ¿existe alguna forma de acceder a un componente ya creado en un jframe de una manera cómoda?

Edito: Hablo de acceder desde la propia clase como desde la función btClick, en el caso de acceder desde fuera ya sé que tendría que cambiar la visibilidad de la función.
Edito2:
Lo que hago es declarar JLabel lblLabel1; Al incio fuera de " initialize()" y dentro de initialize() poner lblLabel1 = new JLabel("Texto de prueba");
Pero no se si es el paso correcto o si se puede acceder a cualqueria de los componentes de un jframe de otro modo.

Saludos, gracias y perdona por preguntar tanto.

Última edición por amokiller; 25/04/2013 a las 03:46
  #6 (permalink)  
Antiguo 25/04/2013, 03:48
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Existe el concepto de Widget.

Creas una clase que va extender una clase base, por ejemplo JFrame.

Esa clase nueva va a tener un atributo correspondiente al JLabel y otro correspondiente al botón (tienes que añadir esos atributos con visibilidad private).

creas getter y setter para esos dos atributos. Eclipse botón derecho sobre el código > Source > Generate Getters and Setters y seleccionas el label y el boton.

En el initialice asignas el label y boton que hayas creado a esos atributos.

Cuando accedas desde otro elemento al frame de esa clase, podras entonces utilizar el getter para acceder directamente al botón o al label.

///

Este tipo de programación tiene una curva de aprendizaje bastante complicada, y te complica más si ya vienes viciado por otra forma de programar, así que no te desesperes porque no te salgan las cosas al principio y vete siempre a lo simple.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #7 (permalink)  
Antiguo 25/04/2013, 04:09
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Cita:
Iniciado por Fuzzylog Ver Mensaje

Este tipo de programación tiene una curva de aprendizaje bastante complicada, y te complica más si ya vienes viciado por otra forma de programar, así que no te desesperes porque no te salgan las cosas al principio y vete siempre a lo simple.
Jeje, si creo que me voy a quedar con declarar los objetos a los que necesite acceder de forma global a la clase y hacer funciones visibles desde otra.
Al menos hasta que se me quite el vicio .net que es ir dando al "." todo el rato y ya se va completando todo solo, jajajaja.

Saludos y gracias.
  #8 (permalink)  
Antiguo 25/04/2013, 04:48
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Los IDEs de java también permiten eso, pero igual te dejan elegir entre varias opciones. :)
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #9 (permalink)  
Antiguo 25/04/2013, 04:52
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Cita:
Iniciado por Fuzzylog Ver Mensaje
Los IDEs de java también permiten eso, pero igual te dejan elegir entre varias opciones. :)
Anda pues si que...
En eclipse hay un botón que se llama "convert local to field" al tener seleccionado un objeto, por ejemplo un label te declara el objeto de forma global... ni lo habia visto.

Gracias nuevamente.
  #10 (permalink)  
Antiguo 27/04/2013, 19:25
 
Fecha de Ingreso: julio-2012
Mensajes: 39
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: ¿Consejos para programar en java? Aplicaciones de escritorio.

Hay un plugin muy bueno que se llama WindowsBuilder Pro para eclipse, busca en san gogle como instalarlo en tu eclipse y este te ayudara a crear ventanas de forma visual...

Etiquetas: aplicaciones, clase, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 23:07.