|
|
|
|
Outline ·
[ Estándar ] ·
Lineal+
error en el codigo de java...., principiante T.T
| blizknight |
Apr 13 2006, 02:49 PM
|
Maestro
    
Grupo: Members
Mensajes: 265
Registrado: 12-September 04
Miembro nº: 18.538

|
see funciono!!!!.... MUXAS GRAXIAS!!! por cierto ... en el caso que no use el jcreator para ejecutar el programa y se lo mandea otra persona... esa como lo ejecuta????? de paso me puedes explicar un poco mas estas lineas que no entendi mixo para que servian .. estas son las partes del code que con comentario no entendi muxo pero creo que la que dice getcontentpane().setlayout(null) es para que este vacia. y sobre importar el paquete de la clse javax.swing... no entendi muxo para que sirve eso.... ni en el manual que tengo ... luego para que se usa publick static void main()....... o sea no entendi que funcion cumple y lo que sigue abajo... espero que no sea muxa molestia saludos ! QUOTE import javax.swing.* public class hola extends JFrame getContentPane().setLayout(null)
public static void main(String args[]) { new hola().setVisible(true); //Crea una nueva Instancia del constructor hola y la hace visible }
//Declaracion de variables private JLabel etiqueta1; CODE import javax.swing.*; //Importa las clases del paquete javax.swing
//Inicio de la clase hola que hereda los metodos de la clase JFrame public class hola extends JFrame { public hola() //Inicio del constructor (debe llamarse igual que la clase) { setSize(300,200); //Tamanio del formulario setTitle("Hola Mundo"); //Titulo setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Salir al cerrar setResizable(false); //no se puede redimensionar getContentPane().setLayout(null); //Establece el administrador de diseno nulo etiqueta1=new JLabel(); //se crea una nueva etiqueta llamada etiqueta1 etiqueta1.setText("Hola Mundo"); //Establece el texto de la etqieuta getContentPane().add(etiqueta1); //Agrega la etiqueta al formulario etiqueta1.setBounds(110,70,68,16);//Establece las coordenadas de la etiqueta equivalente en vb a (left,top,width,height) }
/**Metodo Principal*/ public static void main(String args[]) { new hola().setVisible(true); //Crea una nueva Instancia del constructor hola y la hace visible }
//Declaracion de variables private JLabel etiqueta1;
|
|
|
|
|
| rob1104 |
Apr 13 2006, 06:46 PM
|
Xbox Live... The best thing ever happened around videogames

Grupo: Moderadores
Mensajes: 1.665
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342

|
Bueno dicen que soy malo para explicar, pero ahi va CODE import javax.swing.*;
En pocas palabras, te dire que todas las clases importantes estan almacenadas em algun paquete con algun nombre, para no tener que teclear el largo nombre de esa clase se usan las sentencias import En el caso de las clases para crear una intergaz grafica (GUI), todas las clases necesarias para crear una ventana estan dentro del paquete javax.swing, clases como JFrame, JButton, JLabel, JTextField, y un monton mas...., entonces si no pusieras la sentencia import javax.swing.*; siempre que vayas a utilizar una clase que este dentro del paquete javax.swing tendrias que hacerlo escribiendo todo el nombre del paquete: Ejemplo: CODE public class hola2 extends javax.swing.JFrame { public hola2() { setSize(300,200); setTitle("Hola"); setResizable(false); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); getContentPane().setLayout(null); etiqueta1=new javax.swing.JLabel(); etiqueta1.setText("Hola Mundo"); getContentPane().add(etiqueta1); etiqueta1.setBounds(110,70,68,16); } public static void main(String args[]) { new hola2().setVisible(true); } private javax.swing.JLabel etiqueta1; } Notas la diferencia  , seria mas tedioso escribir asi, pococ a poco utilizaras mas clases como java.awt.*, java.awt.event.*, java.io.*, java.sql.*, en fin hay bastantes en el sdk. CODE public class hola extends JFrame { } Como ya te lo habia mencionado ese codigo crea una case publica que hereda los metodos de la clase JFrame (tales como el setTitle, setSize, setResizable,setVisible), y todo lo que esta entre { } es el codigo de la clase, en conclusion eso hace que se creee el archivo.class (por eso se debe llamar igual que el archivo .java) yo todo ese codigo es el de la clase, puede haber mas clases en un archivo.java pero solo una puede ser publica. CODE getContentPane().setLayout(null)
getContentPane() es el panel raiz de una ventana, es decir es donde se van agregar los demas objetos como lso botones, etiquetas, cajas de texto, etcetera. Ahora bien, en Java existen los administradores de diseno, que son los siguientes: BoderLayout: Establece cinco zonas dentro del área de trabajo denominadas PAGE_START, PAGE_END, LINE_START, LINE_END y CENTER. BoxLayout: Se utiliza para colocar elementos uno detrás de otro de ariba a abajo formando una pila o bien de izquierda a derecha formando una cola. FlowLayout: Agrupa los componentes formando una cola. La mayor parte de los contenedores utilizan este administrador cuando no se especifica otro. GridLayout: Colocación de elementos en una matriz. CardLayout: Para interfaces tipo pestañas. Y tambien existe el nulo, que significa que la ventana no tendra administrador de diseno, es decir puedes poner los objetos donde desees, de acuerdo a coordenadas que ettableceras con el metodo setBounds. Para asignar un administrador de diseno a un panel, en este caso al getContentPane(), (panel principal) se invoca al metodo setLayout, y asi se puede asignar cualquier administrador que te mencione antes. CODE public static void main(String args[]) { new hola().setVisible(true); //Crea una nueva Instancia del constructor hola y la hace visible } Como te lo habia mencionado, toda aplicacion en java debe tener un metodo principal por el cual empezar, es decir que lo primero que lee la maquina virtual en un archivo .class es el metodo main, este debe ser publico, estatico y no debe retornar valores, y otra condicion es que debe llevar un array llamado args tipo String, para que??, eso te quedara mas claro si haces programas modo consola, pero por el momento no es necesario que lo entiendas bien, solo con que quede claro que es el metodo principal y lo primero que se lee, y como puedes ver en este caso manda llamar al constructor hola() y lo hace visible, es decir crea una nueva ventana y la hace visible. Fijate lo que pasa si pones esto en el main: CODE public static void main(String args[]) { new hola().setVisible(true); new hola().setVisible(true); } Veras que quedara mas claro Por ultimo la declaracion de variables CODE //Declaracion de variables private JLabel etiqueta1; Ahi declaras todas las variables usadas por el programa para poder usarlas, es decir esa sentencia asigna a etiqueta1 como una variable tipo JLabel() o sea etiqueta, si ya programaste en vb se te hara muy facil, y luego ya en el constructor creas la etiqueta en si y cambias sus valores CODE etiqueta1=new JLabel(); etiqueta1.setText("Hola Mundo"); Espero haya quedado claro, o por lo menos te haya despejado algunas dudas (si no es que te creo mas  ).... Un saludo, cualquier cosa aqui estamos para ayudarnos...
|
|
|
|
|
| blizknight |
Apr 14 2006, 04:03 AM
|
Maestro
    
Grupo: Members
Mensajes: 265
Registrado: 12-September 04
Miembro nº: 18.538

|
Wow .... tengo que guardar esto que es como mi manual XD muy bueno.. a ver dejame ver si entendi el import javax.swing sirve para llamar a los componentes de la interfaz ...o sea como una cja de herramientas.... sin ella no puedes armar interfaz.. por cierto ... hay otras importantes que valla a usar -?? ... o existe una lista ? luego .. esto es lo que produce el .class : CODE public class hola extends JFrame { } .. sobre los administradores de diseños ... se aplicaria asi ? CODE getContentPane().setLayout(BorderLayout) o asi ?
getContentPane(), (BorderLayout) y al poner null hace que nosotros ordenemos como queramos con esto : (ejemplo) etiqueta1.setBounds(110,70,68,16); y en el caso que sea con unos de los admnistradores de diseño te lo ordena solo como una plantilla =? QUOTE public static void main(String args[]) { new hola().setVisible(true); //Crea una nueva Instancia del constructor hola y la hace visible } y con el codigo de arriba sin no tenemos esto pues el formulario no se muestra ya que hace que la ventana del programa este visible nop??? y se pueden poner mas cosas abajo ?? como poner un " new chau().setVisible(true);" y para que se utilizaria poner mas ??? no se si me dejo entender...(sera para trabajar con mas ventanas) ? y por ultimo sobre lo de declarar variables esto si se me hace facil por que programo en vb ... aunque no muxo ... CODE private JLabel etiqueta1; esto define a etiqueta1 como un label nop ??... y por que se usa private y no defrente ?? CODE etiqueta1=new JLabel(); etiqueta1.setText("Hola Mundo"); y lo de arriba supongo que la primera linea es para crear el label con el nombre de etiqueta1 y la segundo para que tenga ese caption.... XD nop ? Espero haber entendido XD PD: te puedo agregar a mi msn
|
|
|
|
|
| rob1104 |
Apr 14 2006, 07:26 AM
|
Xbox Live... The best thing ever happened around videogames

Grupo: Moderadores
Mensajes: 1.665
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342

|
 Bien, ya ves que no es dificil, ya son menos las dudas  Respecto a los administradores de disenio (layouts), si es algo muy detallado en cuestion, pero es exactamente como tu dices un tipo plantilla para hacer mas facil la distribucion de los objetos en el formulario (aunque a mi en lo particular prefiero el nulo por que es mas facil para mi), los layouts o mejor dicho las clases Layouts estan en el paquete java.awt, asi que si quieres usar alguno tienes que importar las clases. Para asignar un layout primero se tiene que crear, ejemplo: CODE getContentPane().setLayout(new BorderLayout()) Eso asigna un layout tipo BorderLayout al getContentPane() LAYOUTS EN JAVAEn ese enlace puedes encontrar mucha informacion sobre los layouts ya que es demasiado extenso y detallado, si quedan dudas, que sean lo mas concreto posible. QUOTE public static void main(String args[]) { new hola().setVisible(true); //Crea una nueva Instancia del constructor hola y la hace visible }
y con el codigo de arriba sin no tenemos esto pues el formulario no se muestra ya que hace que la ventana del programa este visible nop??? y se pueden poner mas cosas abajo ?? como poner un " new chau().setVisible(true);" y para que se utilizaria poner mas ??? no se si me dejo entender...(sera para trabajar con mas ventanas) ? Claro que si, puedes trabajar con tantos formularios necesite tu aplicacion, claro que antes tienes que crear mas clases, puedes crearlas en archivos separados, o en el mismo, pero recuerda que por cada archivo.java solo puede haber una clase publica, eh aqui un ejemplo de lo que pides: CODE /* *prueba.java */ import javax.swing.*; //Importa todas las clases del paquete javax.swing import java.awt.*; //Importa todas las clases del paquete java.awt (En este caso para los administradores de diseno)
public class prueba extends JFrame //Clase prueba { public prueba() { setBounds(200,200,400,200); //Coordenadas del formulario 1 (Left,Top,Width,Height) setTitle("Soy el formulario 1"); setResizable(false); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//Cierra el programa al cerrar el formulario getContentPane().setLayout(new BorderLayout()); //Administrador de disenio BorderLayout etiqueta1=new JLabel(); etiqueta1.setText("Este es el formulario 1"); getContentPane().add("Center",etiqueta1); //Agrega la etiqueta al centro } public static void main(String args[]) { new prueba().setVisible(true); new chau().setVisible(true); } private JLabel etiqueta1; }
/*//clase chau (esta no es publica porque solo puede haber una public por archivo.java*/ class chau extends JFrame { public chau() { setBounds(650,200,400,200); setTitle("Soy el formulario 2"); setResizable(false); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//Cierra el programa al cerrar el formulario getContentPane().setLayout(new BorderLayout());//Administrador de disenio BorderLayout etiqueta2=new JLabel(); etiqueta2.setText("Este es el formulario 2"); getContentPane().add("Center",etiqueta2); //Agrega la etiqueta al centro } private JLabel etiqueta2; } Aprovecho para contestar otra duda mas, sobre importar las clases es un tema muy extenso, pero recuerda solo importar las que necesite tu aplicacion ya que existen clases en diferentes paquetes con el mismo nombre y te puede marcar un error de ambiguedad, como ves en el ejemplo importe las clases del paquete java.awt, porque ahi se encuentran todos los layout, en este caso java.awt.BorderLayout(), la lista de los mas importantes son los siguientes: CODE import javax.swing.*; //Componentes swing (GUI) import java.awt.*; //Componentes AWT (GUI) import java.awt.event.*; //Eventos de los componentes import java.io.*; //Manejo de entrada y salida import java.sql.*; //Manejo de bases de datos sql import java.applet.*; //Manejo de applets (internet) import java.net.*; //Manejo de red aplciaciones cliente/servidor import java.text.*; //Manejo de texto y formato bajo consola import java.util.*; //Manejo del sistema, creo que esta se importa sola, no recuerdo :S Respecto a las variables, si las declaras privadas no podran ser accedas de ninguna otra clase, es decir solo estaran disponibles para la clase en la cual fueron declaradas, y si las declaras publicas las variables estaran disponibles para todas las clases que utilies en tu programa. Un saludo Puedes agregarme al msn si quieres, esta en mi perfil, pero preferiria responderte tus dudas por el foro para asi poder ayudar a los demas si necesitan algo similar
|
|
|
|
|
| rob1104 |
Apr 15 2006, 07:00 AM
|
Xbox Live... The best thing ever happened around videogames

Grupo: Moderadores
Mensajes: 1.665
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342

|
Es algo complicado de explicar eso de los administradores de diseno y el getContentPane(), para no hacernos bolas el getContentPane() es el panel principal del formulario, tu puedes agregar a tu formulario tantos paneles como quieras, pero te dare una alternativa mucho mas facil a usar el getContentPane(), y te ayudara si trabajas con varios formulario en una sola aplicacion. En vez de solo instanciar el formulario, lo vamos a crear como objeto, que es como deberia de ser, un ejemplo muy sencillo seria este: CODE /* *Ventana.java */ import javax.swing.*; import java.awt.*; public class Ventana extends JFrame { public static void main(String args[]) { ventana1=new Ventana(); //Se crea la primera ventana ventana2=new Ventana(); //Se crea la segunda ventana ventana1.setTitle("Ventana 1"); ventana1.setBounds(100,100,300,200); ventana1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
ventana2.setTitle("Ventana 2"); ventana2.setBounds(450,100,300,200); etiqueta1 = new JLabel("Norte"); etiqueta2 = new JLabel("Sur"); etiqueta3 = new JLabel("Este"); etiqueta4 = new JLabel("Oeste "); etiqueta5 = new JLabel("Centro");
//Ejemplo de BorderLayout (ya no use getContentPane() directamente si no que se usa relaconado el jframe) ventana1.setLayout(new BorderLayout()); ventana1.add(etiqueta1,BorderLayout.NORTH); ventana1.add(etiqueta2,BorderLayout.SOUTH); ventana1.add(etiqueta3,BorderLayout.EAST); ventana1.add(etiqueta4,BorderLayout.WEST); ventana1.add(etiqueta5,BorderLayout.CENTER); ventana2.setLayout(new GridLayout(2,2)); //GridLayout con 2 filas y dos columnas (tipo excel)
etiqueta6=new JLabel("Fila Uno Columna uno"); etiqueta7=new JLabel("Fila Uno Columna Dos"); etiqueta8=new JLabel("Fila Dos Columna Uno"); etiqueta9=new JLabel("Fila Dos Columna Dos"); ventana2.add(etiqueta6); ventana2.add(etiqueta7); ventana2.add(etiqueta8); ventana2.add(etiqueta9); //Muestra los formularios en pantalla ventana1.setVisible(true); ventana2.setVisible(true); } //Declaracion de variables (ahora tienen que ser estaticas porque estoy trabajando con varios JFrames) private static Ventana ventana1; private static Ventana ventana2; private static JLabel etiqueta1; private static JLabel etiqueta2; private static JLabel etiqueta3; private static JLabel etiqueta4; private static JLabel etiqueta5; private static JLabel etiqueta6; private static JLabel etiqueta7; private static JLabel etiqueta8; private static JLabel etiqueta9; } Ahi queda mas claro a lo que se refiere el getContentPane(), ya depende de ti en que forma trabajar, y tmb intento explicar los dos layouts mas importantes (BorderLayout y GridLayout) Analiza el codigo y saca tus conclusiones
|
|
|
|
|
| blizknight |
Apr 15 2006, 04:01 PM
|
Maestro
    
Grupo: Members
Mensajes: 265
Registrado: 12-September 04
Miembro nº: 18.538

|
bueno entendi el orden del grid layout y el border layout. ..y pense que el getcontentpane era como un admin pero ahora que veo es para nombrar al from principal no es asi ? ya que asi se agregan objetos al form de otra forma nop ? asi ? CODE getContentPane().add("Center",etiqueta1); //Agrega la etiqueta al centro //y esto es cuando se trabaja con mas ventanas ventana1.add(etiqueta5,BorderLayout.CENTER); Por cierto si compilo tus codigos ... se ven en el java??? bueno ahora tengo como un 60% mas claro ...es muxo XD ahora voy a poner en practica... pero queria saber si se podian compilarlos codes que me diste para probarlos saludos XD
|
|
|
|
|
| rob1104 |
Apr 15 2006, 09:08 PM
|
Xbox Live... The best thing ever happened around videogames

Grupo: Moderadores
Mensajes: 1.665
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342

|
Asi es, usa el getContentPane() cuando uses solo un formulario, si usas 2 o mas mejor crea los formularios como objetos y asignale sus propiedades independientemente como en los ejemplos que te mande. Respecto a lo de ejecutar tu .class en algun otro equipo que no tenga el jcreator, o mejor dicho distribuir tu aplicacion, solo es necesario que la pc en la que lo ejecutes tenga la maquina virtual de java instalada. Hay dos opciones para ello, de momento te recomiendo la primera... ya que vayas avanzando es mejor la segunda... PRIMERA OPCION Elaborar un archivo .bat indicando el classpath y el ocmando para ejecutar la aplicacion.Ejemplo, si el programa se llama hola.class y se encuentra en C:\java\ejemplo\, en el .bat tienes que poner lo siguiente: CODE echo off set classpath=C:\java\ejemplo\ javaw hola exit Teclea eso en el bloc de notas y guardalo con extension .bat con el nombre que desees Nota: javaw es exclusivo de windows, sirve para ocultar la ventana ms-dos que aparece atras, para otros s.o. como linux el comando seria java (java hola). SEGUNDA OPCION Crear un archivo .jar que empaquete a todas las clases de tu programa asi como imagenes, iconos, y lo mas importante un archivo de manifesto que indique la clase principalEsta opcion es algo mas complicada al principio, pero luego sera pan comido. Consiste en crear un archivo .jar, esto se hace mediante el simbolo del sistema con el siguiente comando CODE jar cfm MiManifiesto.mf MiArchivo.jar *.class El archivo MiManifesto.mf es u archivo te texto que debe contener lo siguiente CODE Main-Class: claseprincipal Donde claseprincipal es el nombre de la clase principal del programa en este caso simplemente hola. Un saludo
|
|
|
|
|
| blizknight |
Apr 15 2006, 10:51 PM
|
Maestro
    
Grupo: Members
Mensajes: 265
Registrado: 12-September 04
Miembro nº: 18.538

|
la jvm de puede descargar sola de la web de sun nop ?.... por otro lado no se si asi es la posicion del borderlayout y del gridlayout... a ver fijate ... o me parece que estan chuecos... en uno el code es este getContentPane().add("Center",etiqueta1) y sale pegado a la izquierda y en el otro norte y sur y centro salen pegados a la izquierda .... por que ?? ahi estan las imgs ... http://rapidshare.de/files/18101325/Prueba.rar.htmly en el setbounds... los dos ultimos numeros son el alto y ancho y los 2 primeros?? ... ya que ambos tiene el mismo tamañao ... por que en el caso de labels y botones .. los 2 primeros son las coordenadaas nop ?? pero en el caso de una ventana no necestia coordenadas o si ??? o son las coordenadas en que aparecen en pantalla... y las coordenadas por cierto ....se miden en pixeles desde la esquina superior izquierda ?? de la pantalla o la ventana? CODE ventana1.setBounds(100,100,300,200); ventana2.setBounds(450,100,300,200);
setBounds(200,200,400,200); setBounds(650,200,400,200);
|
|
|
|
|
Suscribirse a esta discusión
Recibirás una notificación vía correo cuando haya una respuesta y no estés activos en los foros.
Suscribirse a este foro
Recibirás una notificación vía correo cuando haya una nueva discusión y no estés activo en los foros.
Bajar/imprimir
Podrás bajar esta discusión en varios formatos o ver una versión apta para impresora.

Topicos similares

Topicos similares
|