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

JButton desde JFrame?

Estas en el tema de JButton desde JFrame? en el foro de Java en Foros del Web. Bueno pues tengo la duda de que cuando creamos una clase para que aparezca una ventana utilizamos JFrame de la libreria swing, pero ademas de ...
  #1 (permalink)  
Antiguo 08/11/2011, 18:30
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 13 años
Puntos: 1
JButton desde JFrame?

Bueno pues tengo la duda de que cuando creamos una clase para que aparezca una ventana utilizamos JFrame de la libreria swing, pero ademas de eso hay que colocar extends para hacer uso de sus metodos dentro de la clase, porque con Jbutton no hay que poner extends? es que JButton deriva de JFrame, porque por mas que leo no veo ninguna herencia directa desde JFrame, en fin, gracias.
  #2 (permalink)  
Antiguo 08/11/2011, 21:14
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: JButton desde JFrame?

Hola,

Cita:
Iniciado por luigimaldini Ver Mensaje
Bueno pues tengo la duda de que cuando creamos una clase para que aparezca una ventana utilizamos JFrame de la libreria swing, pero ademas de eso hay que colocar extends para hacer uso de sus metodos dentro de la clase, porque con Jbutton no hay que poner extends? es que JButton deriva de JFrame, porque por mas que leo no veo ninguna herencia directa desde JFrame, en fin, gracias.
Estás mezclando dos cosas completamente diferentes, una es el uso normal de objetos y otra es la herencia de clases.

Cuando tienes una clase cualquiera puedes extenderla para que tenga mejor funcionamiento, por ejemplo:
Código Java:
Ver original
  1. public class MySuperJFrame extends JFrame { ... }
  2. public class MySuperJButton extends JButton { ... }
En el caso de MySuperJFrame estás diciendo que vas a crear un JFrame mas avanzado que el simple JFrame, así también MySuperJButton puede tener también otras cualidades mejoradas que un simple JButton, por ejemplo que al presionarlo haga algún tipo de animación.

Ahora bien, cuando usas un objeto no lo estás extiendo, simplemente lo estás usando, por ejemplo:
Código Java:
Ver original
  1. JFrame frame = new JFrame();
  2. JButton button = new JButton();
En el caso del frame simplemente estás haciendo una ventana, sin funcionamiento específico, es decir, una ventana vacía. Si llamas al método setVisible(true) del frame, se va a ver una ventana sin nada (simplemente la barra de título y los botones de minimizar, maximizar y cerrar típicos de las ventanas). Aunque posteriormente puedas cambiarle el título, los colores, tamaño, etc. Por ejemplo:
Código Java:
Ver original
  1. frame.setTitle("Ventana");
Así también en el caso del JButton estás haciendo un botón vacío, sin funcionamiento y sin texto. Posteriormente puedes agregarle funcionamiento con un addListener() de cualquier tipo y puedes cambiarle el texto, colores, etc. Por ejemplo:
Código Java:
Ver original
  1. button.setText("Botón");
Para entender completamente el concepto busca un tutorial en Java sobre 'Herencia'.

Saludos,
  #3 (permalink)  
Antiguo 09/11/2011, 08:14
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 13 años
Puntos: 1
Respuesta: JButton desde JFrame?

Hola amigo, tu respuesta me ha servido para ver todo con bastante claridad, el problema de todo esto es que por muchos manuales que leas en internet o videotutoriales que veas jamas se entienden las cosas como son en realidad, los manuales muchos de ellos con errores ortograficos no te llegan a comprender el porque de las cosas, y los videotutoriales las personas que explican piensan que somos trabajadores de microsoft, y somos personas que pretendemos aprender poco a poco, te digo esto porque en todos los manuales leido y videotutoriales visto siempre he visto la misma sintaxis, te dejo un detalle:


import javax.swing.*
public class Ventana extends JFame{
}
Si yo veo esa sintaxis en todos los manuales de la web y videotutoriales pienso que para utilizar metodos y miembros de esa clase necesito la palabra clave extends, de ahi mi pregunta en el post, tu me has dado la respuesta que me ha ayudado, pero en la red no encuentras esa respuesta.porque en lugar de hacer eso para una ventana no hacen esto?

import javax.swing.*
public class Ventana {
public static void main(STring[] args) {
JFrame Ventana = new JFrame();

Este ultimo codigo es el que tienen que poner en manuales para saber que no se necesita un extends para crear ventana, no se si entiendes lo que intento decirte, primero hay que explicar el codigo de abajo para entender que con import tienes todo listo para crear el objeto, y con la de arriba creas tu clase con todos los metodos y atributos heredados de JFRame, creo que empiezan la casa por el tejado en lugar de por la base, y eso es un error grave para los que estamos aprendiendo con esfuerzo la POO, y menos mal que yo vengo de haber programado hace muchos años en Cobol, pascal, gwbasic, etc.... que sino entonces la llevaria clara.

Gracias de nuevo y un saludo.
  #4 (permalink)  
Antiguo 09/11/2011, 11:10
Avatar de afrika026  
Fecha de Ingreso: junio-2011
Mensajes: 85
Antigüedad: 13 años, 4 meses
Puntos: 19
Respuesta: JButton desde JFrame?

lo que explicó HackmanC esta muy claro y correcto.

pero vos estas poniendo el ejemplo de la red:

import javax.swing.*
public class Ventana {
public static void main(STring[] args) {
JFrame Ventana = new JFrame();

Primero a tener en cuenta, "import javax.swing.*" con este import estas importando todos las clases y metodos de la librería swing.

Segundo, en el ejemplo que vos expones no esta mal, se puede interpretar que la clase Ventana no es un JFrame, pero en la misma si se instancia un objeto JFrame.
Te pongo un ejemplo:

Caso 1: public class Ventana{...} //no podes en esta clase cambiar colores, agregar eventos de ventana

otra clase por ejemplo:
public class Aplicacion extends Ventana{...}

la clase "Aplicacion" va a heredar los metodos de la clase Ventana que
vos hayas creado pero NO los metodos del JFrame, desde la clase Aplicación, no podes
cambiar colores, agregar eventos de ventana, es decir no podes interactuar con la misma ya
que en la clase heredada "Ventana" tampoco se puede.

Caso 2: public class Ventana extends JFrame{...}
//podes en esta clase cambiar colores, agregar eventos de ventana

otra clase por ejemplo:
public class Aplicacion extends Ventana{...}

la clase "Aplicacion" va a heredar los metodos y propiedades de la clase Ventana que
vos creastes y además los metodos del JFrame, ya que la clase
Ventana "es un JFrame" ampliado con los metodos y propiedades que le
hayas agregado.
Desde la clase Aplicación, podes cambiar por ejemplo el color de un texo que este en esa
ventana, el título, los colores, agregar eventos, etc. Entonces tenes todas la herramientas
necesarias para manejar esa ventana.

Última edición por afrika026; 09/11/2011 a las 11:23
  #5 (permalink)  
Antiguo 09/11/2011, 11:45
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 13 años
Puntos: 1
Respuesta: JButton desde JFrame?

Amigo he puesto el ejemplo de la red porque es el mismo en todos los tutoriales y videotutoriales que he visto, no se si me entendiste, yo entiendo lo que tu dices y lo que el compañero me explico perfectamente, pero lo que intento decir es que para crear una ventana no hace falta colocar un extens JFRame como he visto en todos los tutoriales, basta con import y listo, despues en la main creas el objeto y si quieres cambiar texto,color tambien lo haces una vez creado el objeto:

import javax.swing.*
public class ventana {
public static void main(String [] args) {

JFrame ven = new JFrame();
ven.setTitle("nuevo titulo"); // aqui cambiamos el titulo
ven.setSize(300,300); // aqui cambiamos el tamaño

Lo que intento decir es que todo se puede hacer desde la main sin tener que crear una clase y un extends del JFRame, creo haberme explicado. Digo esto para que la gente sepan como hacer una ventana sin necesidad de tener que crear una clase especial y un extends de esa clase. Gracias y un saludo.
  #6 (permalink)  
Antiguo 09/11/2011, 14:25
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: JButton desde JFrame?

Hola,

Cita:
Iniciado por luigimaldini Ver Mensaje
... el problema de todo esto es que por muchos manuales que leas en internet o videotutoriales que veas jamas se entienden las cosas como son en realidad, ...
En lo personal me parece que aprender programación con vídeos es una pérdida de tiempo increíble, de los pocos vídeos que he visto de programación en youtube u otros me hubiera tomado un décimo del tiempo invertido en ver el vídeo leer una hoja de un manual.

Diferente es google video, (aunque vienen del mismo árbol), que explican tecnologías de forma abstracta para que uno las interprete. Como por ejemplo el HTML 5, no te explican como hacer una página, sino para qué sirve y las novedades.

Cita:
Iniciado por luigimaldini Ver Mensaje
... Si yo veo esa sintaxis en todos los manuales de la web y videotutoriales pienso que para utilizar metodos y miembros de esa clase necesito la palabra clave extends, ...
Yo creo que la forma de explicar en los tutoriales el hecho de usar extends para implementar las ventanas es correcta. El hecho es el siguiente, primero la mayoría de las veces vas a estar usando extends para crear ventanas, y segundo cuando ya tienes la experiencia y estás avanzado en el tema de la herencia puedes comprender este concepto mas fácilmente.

Cita:
Iniciado por afrika026 Ver Mensaje
... Segundo, en el ejemplo que vos expones no esta mal, se puede interpretar que la clase Ventana no es un JFrame, pero en la misma si se instancia un objeto JFrame. ...
Todo depende del objetivo deseado, porque técnicamente es válido crear ese tipo de aplicaciones, pero en lugar de herencia está usando polimorfismo múltiple por medio de encapsulación. Y tienes toda la razón, al no heredar de JFrame no es un JWindow ni hereda del mismo lugar por lo tanto no se puede usar en interfaces.

Es bueno aclarar que no es lo mismo, aunque como mencioné antes, depende del objetivo.

Cita:
Iniciado por luigimaldini Ver Mensaje
... pero lo que intento decir es que para crear una ventana no hace falta colocar un extens JFRame como he visto en todos los tutoriales, basta con import y listo, despues en la main creas el objeto y si quieres cambiar texto,color tambien lo haces una vez creado el objeto: ...
Si es posible hacerlo de la forma que expones, pero no es lo mismo, primero pierdes la herencia, pierdes el acceso a los métodos 'protected' y los paradigmas de programación que tienes que usar son completamente diferentes, normalmente requieren mayor experiencia para poder modificar su funcionamiento y al final resulta más difícil.

El mejor ejemplo creo que es el JTable y el DefaultTableModel, la mayoría de personas usan el JTable directamente, agregando filas y columnas (al estilo que mencionas de usar el JFrame sin extenderlo), si aprendieran a extender el DefaultTableModel o implementar el AbstractTableModel se les haría mucho mas fácil hacer programas muy complejos.

Cita:
Iniciado por luigimaldini Ver Mensaje
... Lo que intento decir es que todo se puede hacer desde la main sin tener que crear una clase y un extends del JFRame, creo haberme explicado. ...
Yo creo que hay que tener el conocimiento para hacerlo de las dos formas, porque en algún lugar de tus aplicaciones posiblemente necesites ponerlos en práctica.

Pero tiene que quedar bien claro que no es lo mismo, lo único que tienen en común es que te muestra un JFrame en pantalla, pero internamente es como hablar de manzanas y casas, dos cosas completamente diferentes.

Saludos,

Última edición por HackmanC; 09/11/2011 a las 14:41 Razón: Ejemplo de JTable
  #7 (permalink)  
Antiguo 09/11/2011, 15:51
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 13 años
Puntos: 1
Respuesta: JButton desde JFrame?

Claro que tienes razon en todo lo que escribes, pero lo que pretendia hacer entender que la ventana creada es igual en ambos ambitos, otra cosa es la forma de actuar internamente cada programa, en fin, solo eso.saludos.

Etiquetas: jbutton
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




La zona horaria es GMT -6. Ahora son las 11:04.