Autor
|
Tema: No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame (Leído 2,621 veces)
|
-Localhost-
Desconectado
Mensajes: 9
|
Hola a todos, Bueno estaba haciendo un ejercicio que me mandaron que consiste en poner unos componentes gráficos en un frame (para más adelane hacer que cumplan la función que deberían). El código es el siguiente: import java.awt.*; import eje01.sColor; public class mueveCosasDibujables extends Frame { private String colores [] = {"negro", "azul", "cyan", "gris oscuro", "gris", "verde", "gris claro", "magenta", "naranja", "rosa", "rojo", "blanco", "amarillo"}; private String[] coloresFondo = colores,coloresTexto = colores ; BTizquierda = new Button("izquierda"), BTderecha = new Button ("derecha"), BTaumentar = new Button("aumentar"), BTdisminuir = new Button("disminuir"); private sColor sColoresFondo= new sColor("Color de fondo",coloresFondo),sColoresTexto = new sColor("Color del texto",coloresTexto); public mueveCosasDibujables() { setVisible(true); setSize(400,400); setLocation(500,200); CHfiguras.addItem("Selecciona figura"); CHfiguras.addItem("Cuadrado"); CHfiguras.addItem("Círculo"); CHfiguras.addItem("Rectángulo"); CHfiguras.addItem("Triángulo"); PNnorte.add(CHfiguras); PNnorte.add(sColoresFondo); PNnorte.add(sColoresTexto); PNsur.add(BTarriba); PNsur.add(BTabajo); PNsur.add(BTizquierda); PNsur.add(BTderecha); PNsur.add(BTaumentar); PNsur.add(BTdisminuir); add("North",PNnorte); add("South",PNsur); } public static void main (String args []){ new mueveCosasDibujables(); } }
eje01 es el package que incluye los ejercicios de la primera unidad y sColor es una extensión de la clase Choice que lo que hace es añadir el título del choice (que lo recibe en el primer parametro) y los componentes que sean colores en el Choice (que lo recibe en el segundo parametro al construirlo) y devolver los colores como objetos Color cuando los seleccionas. El problema es que los componentes gráficos únicamente se dibujan por pantalla cuando intento modificar el tamaño del frame (hago click en los laterales o la barra de título), o cuando lo modifico (con el cursor, no desde código). Gracias de antemano, Un saludo.
|
|
« Última modificación: 29 Julio 2010, 10:41 am por Debci »
|
En línea
|
|
|
|
Leyer
Desconectado
Mensajes: 786
leyer@elhacker.net
|
Bueno unieras colocado el code faltante.
Solo puedo decir
1.Se sebe estar generando una exepcion en la clase faltante.
2.Es habitual colocar los métodos de visibilidad y localización, luego de haber agregado todos los componentes.
Un saludo.
|
|
« Última modificación: 29 Julio 2010, 08:30 am por LEYER »
|
En línea
|
|
|
|
-Localhost-
Desconectado
Mensajes: 9
|
Hola, gracias por responder, sColor no produce ninguna excepción, su código es éste: package eje01; import java.awt.*; import java.awt.event.*; import java.util.*; public class sColor extends Choice { if(!primerItem.equals("") && !primerItem.equals(null)){ this.addItem(primerItem); } else { this.addItem("Selecciona un color"); } for(int n=0;n<colores.length;n++){ Color color = leerColor (colores [n ]); if(color!=null && noRepetido(colores[n])){ this.addItem(colores[n].toString()); listaColores.add(colores[n].toString()); } } } public boolean noRepetido (String color ){ for (int n=0;n<listaColores.size();n++){ if(listaColores.get(n).toString().equalsIgnoreCase(color)){ return false; } } return true; } Color colorResultado =null; String colores [] = {"negro", "azul", "cyan", "gris oscuro", "gris", "verde", "gris claro", "magenta", "naranja", "rosa", "rojo", "blanco", "amarillo"}; int identificadorColor=colores.length; for (int n=0;n<colores.length;n++){ if(color.toLowerCase().equals(colores[n])){ identificadorColor=n; n=colores.length;} } switch(identificadorColor){ case 0: colorResultado = Color. black; break; case 1: colorResultado = Color. blue; break; case 2: colorResultado = Color. cyan; break; case 3: colorResultado = Color. darkGray; break; case 4: colorResultado = Color. gray; break; case 5: colorResultado = Color. green; break; case 6: colorResultado = Color. lightGray; break; case 7: colorResultado = Color. magenta; break; case 8: colorResultado = Color. orange; break; case 9: colorResultado = Color. pink; break; case 10: colorResultado = Color. red; break; case 11: colorResultado = Color. white; break; case 12: colorResultado = Color. yellow; } return colorResultado; } }
Es algo que tiene que ver con lo segundo porque modifiqué eso y se vio la parte de arriba únicamente, luego le agregué un "pack();" y ahora se ven todos los componentes correctamente, pero "center" quiero que ocupe más espacio, apenas ocupa un par de píxeles, sabes como podría hacerlo más grande? probé con introducirle un panel y ponerle setSize(360,360); pero ni aún así. No sé si habrá una manera mejor que pack, yo lo preferiría porque pack() no me deja modificar el tamaño inicial del Frame. Adjunto el código modificado: import java.awt.*; import eje01.*; public class mueveCosasDibujables extends Frame { private String colores [] = {"negro", "azul", "cyan", "gris oscuro", "gris", "verde", "gris claro", "magenta", "naranja", "rosa", "rojo", "blanco", "amarillo"}; private String[] coloresFondo = colores,coloresTexto = colores ; BTizquierda = new Button("izquierda"), BTderecha = new Button ("derecha"), BTaumentar = new Button("aumentar"), BTdisminuir = new Button("disminuir"); private sColor sColoresFondo= new sColor("Color de fondo",coloresFondo),sColoresTexto = new sColor("Color del texto",coloresTexto); public mueveCosasDibujables() { CHfiguras.addItem("Selecciona figura"); CHfiguras.addItem("Cuadrado"); CHfiguras.addItem("Círculo"); CHfiguras.addItem("Rectángulo"); CHfiguras.addItem("Triángulo"); PNnorte.setLayout(GLnorte); PNnorte.add(CHfiguras); PNnorte.add(sColoresFondo); PNnorte.add(sColoresTexto); PNsur.setLayout(GLsur); PNsur.add(BTarriba); PNsur.add(BTabajo); PNsur.add(BTizquierda); PNsur.add(BTderecha); PNsur.add(BTaumentar); PNsur.add(BTdisminuir); add("North",PNnorte); add("South",PNsur); add("Center",PNcentro); setVisible(true); setLocation(500,200); setSize(400,400); pack(); } public static void main (String args []){ new mueveCosasDibujables(); } }
Un saludo y gracias de antemano.
|
|
« Última modificación: 29 Julio 2010, 10:41 am por Debci »
|
En línea
|
|
|
|
Leyer
Desconectado
Mensajes: 786
leyer@elhacker.net
|
si lo colocas asi debería acomodarse pack(); setSize(400,400);
o setPreferredSize(new Dimension(500,500));
|
|
« Última modificación: 29 Julio 2010, 09:13 am por LEYER »
|
En línea
|
|
|
|
-Localhost-
Desconectado
Mensajes: 9
|
Lo intenté pero lo que coloqué en "South" (es decir el PNsur) se queda el mismo lugar en el que se encontraba antes de redimensionar el Frame, es decir lo único que hace colocar primero el pack(); y luego el setSize, es crecer la ventana, pero no separar los componentes y hacer espacio en el centro. Y setPreferredSize(Dimension d) sólo sirve en los JFrame y tengo que hacerlo con Frame. ________________________EDITO_____________________________________ Lo solucioné poniendo el setSize() antes de definir el layout el setVisible() y cualquier cosa (de hecho lo puse inmediatamente después de super(""); xD) es decir: public mueveCosasDibujables() { super("Dibujador de cosas"); setSize(400,400);
No pongo el code completo porque ahora mismo es un poco más largo que antes, y pa no liar jeje. (y da errores por todos lados el muy desgraciado... xD). Muchas gracias LEYER por tus respuestas =D. Dejé un comentario esta mañana en un post de tu blog, me da errores al compilar el código que subiste como reto para que la gente crackease en java, no sé si está revisado ese código (? xD no sé :S). Un saludo.
|
|
« Última modificación: 31 Julio 2010, 08:43 am por -Localhost- »
|
En línea
|
|
|
|
|
|
|