elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame  (Leído 2,616 veces)
-Localhost-

Desconectado Desconectado

Mensajes: 9


Ver Perfil
No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame
« en: 29 Julio 2010, 07:51 am »

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:

Código
  1. import java.awt.*;
  2. import eje01.sColor;
  3.  
  4. public class mueveCosasDibujables extends Frame {
  5.  
  6.  
  7.  
  8. private String colores[] =  {"negro","azul","cyan","gris oscuro","gris","verde","gris claro","magenta","naranja","rosa","rojo","blanco","amarillo"};
  9. private String[] coloresFondo= colores,coloresTexto = colores;
  10.  
  11.  
  12. private Button BTarriba= new Button("arriba"),
  13.       BTabajo= new Button("abajo"),
  14.       BTizquierda= new Button("izquierda"),
  15.       BTderecha= new Button ("derecha"),
  16.       BTaumentar= new Button("aumentar"),
  17.       BTdisminuir= new Button("disminuir");
  18.  
  19. private Choice CHfiguras = new Choice();
  20. private sColor sColoresFondo= new sColor("Color de fondo",coloresFondo),sColoresTexto = new sColor("Color del texto",coloresTexto);
  21.  
  22. private GridLayout GLnorte = new GridLayout(3,1), GLsur = new GridLayout(6,1);
  23. private Panel PNnorte = new Panel(), PNsur = new Panel();
  24.  
  25. public mueveCosasDibujables() {
  26.  
  27. setVisible(true);
  28. setSize(400,400);
  29. setLocation(500,200);
  30. setLayout(new BorderLayout());
  31.  
  32. CHfiguras.addItem("Selecciona figura");
  33. CHfiguras.addItem("Cuadrado");
  34. CHfiguras.addItem("Círculo");
  35. CHfiguras.addItem("Rectángulo");
  36. CHfiguras.addItem("Triángulo");
  37.  
  38. PNnorte.add(CHfiguras);
  39. PNnorte.add(sColoresFondo);
  40. PNnorte.add(sColoresTexto);
  41.  
  42. PNsur.add(BTarriba);
  43. PNsur.add(BTabajo);
  44. PNsur.add(BTizquierda);
  45. PNsur.add(BTderecha);
  46. PNsur.add(BTaumentar);
  47. PNsur.add(BTdisminuir);
  48.  
  49. add("North",PNnorte);
  50. add("South",PNsur);
  51. }
  52.  
  53. public static void main (String args[]){
  54.  
  55. new mueveCosasDibujables();
  56. }
  57.  
  58.  
  59. }

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 Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame
« Respuesta #1 en: 29 Julio 2010, 08:28 am »

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 Desconectado

Mensajes: 9


Ver Perfil
Re: No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame
« Respuesta #2 en: 29 Julio 2010, 08:56 am »

Hola, gracias por responder,

sColor no produce ninguna excepción, su código es éste:
Código
  1. package eje01;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import java.util.*;
  6.  
  7. public class sColor extends Choice {
  8.  
  9. Vector listaColores= new Vector();
  10.  
  11. public sColor(String primerItem, String[] colores){
  12.  
  13. if(!primerItem.equals("") && !primerItem.equals(null)){
  14.  
  15. this.addItem(primerItem);
  16. } else {
  17. this.addItem("Selecciona un color");
  18. }
  19.  
  20. for(int n=0;n<colores.length;n++){
  21.  
  22. Color color= leerColor(colores[n]);
  23.  
  24. if(color!=null && noRepetido(colores[n])){
  25.  
  26. this.addItem(colores[n].toString());
  27. listaColores.add(colores[n].toString());
  28. }
  29. }
  30. }
  31.  
  32. public boolean noRepetido(String color){
  33.  
  34. for (int n=0;n<listaColores.size();n++){
  35.  
  36. if(listaColores.get(n).toString().equalsIgnoreCase(color)){
  37.  
  38. return false;
  39. }
  40. }
  41.  
  42. return true;
  43. }
  44.  
  45. public static Color leerColor(String color){
  46.  
  47. Color colorResultado=null;
  48. String colores[] = {"negro","azul","cyan","gris oscuro","gris","verde","gris claro","magenta","naranja","rosa","rojo","blanco","amarillo"};
  49. int identificadorColor=colores.length;
  50.  
  51. for (int n=0;n<colores.length;n++){
  52.  
  53. if(color.toLowerCase().equals(colores[n])){
  54.  
  55. identificadorColor=n;
  56. n=colores.length;}
  57. }
  58.  
  59. switch(identificadorColor){
  60.  
  61. case 0: colorResultado = Color.black;
  62. break;
  63. case 1: colorResultado = Color.blue;
  64. break;
  65. case 2: colorResultado = Color.cyan;
  66. break;
  67. case 3: colorResultado = Color.darkGray;
  68. break;
  69. case 4: colorResultado = Color.gray;
  70. break;
  71. case 5: colorResultado = Color.green;
  72. break;
  73. case 6: colorResultado = Color.lightGray;
  74. break;
  75. case 7: colorResultado = Color.magenta;
  76. break;
  77. case 8: colorResultado = Color.orange;
  78. break;
  79. case 9: colorResultado = Color.pink;
  80. break;
  81. case 10: colorResultado = Color.red;
  82. break;
  83. case 11: colorResultado = Color.white;
  84. break;
  85. case 12: colorResultado = Color.yellow;
  86.  
  87. }
  88.  
  89. return colorResultado;
  90. }
  91. }

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:

Código
  1. import java.awt.*;
  2. import eje01.*;
  3.  
  4. public class mueveCosasDibujables extends Frame {
  5.  
  6.  
  7.  
  8. private String colores[] =  {"negro","azul","cyan","gris oscuro","gris","verde","gris claro","magenta","naranja","rosa","rojo","blanco","amarillo"};
  9. private String[] coloresFondo= colores,coloresTexto = colores;
  10.  
  11.  
  12. private Button BTarriba= new Button("arriba"),
  13.       BTabajo= new Button("abajo"),
  14.       BTizquierda= new Button("izquierda"),
  15.       BTderecha= new Button ("derecha"),
  16.       BTaumentar= new Button("aumentar"),
  17.       BTdisminuir= new Button("disminuir");
  18.  
  19. private Choice CHfiguras = new Choice();
  20. private sColor sColoresFondo= new sColor("Color de fondo",coloresFondo),sColoresTexto = new sColor("Color del texto",coloresTexto);
  21.  
  22. private GridLayout GLnorte = new GridLayout(1,3), GLsur = new GridLayout(1,6);
  23. private Panel PNnorte = new Panel(), PNsur = new Panel(),PNcentro= new Panel();
  24.  
  25. public mueveCosasDibujables() {
  26.  
  27. setLayout(new BorderLayout());
  28.  
  29. CHfiguras.addItem("Selecciona figura");
  30. CHfiguras.addItem("Cuadrado");
  31. CHfiguras.addItem("Círculo");
  32. CHfiguras.addItem("Rectángulo");
  33. CHfiguras.addItem("Triángulo");
  34.  
  35. PNnorte.setLayout(GLnorte);
  36. PNnorte.add(CHfiguras);
  37. PNnorte.add(sColoresFondo);
  38. PNnorte.add(sColoresTexto);
  39.  
  40. PNsur.setLayout(GLsur);
  41. PNsur.add(BTarriba);
  42. PNsur.add(BTabajo);
  43. PNsur.add(BTizquierda);
  44. PNsur.add(BTderecha);
  45. PNsur.add(BTaumentar);
  46. PNsur.add(BTdisminuir);
  47.  
  48. add("North",PNnorte);
  49. add("South",PNsur);
  50. add("Center",PNcentro);
  51.  
  52. setVisible(true);
  53. setLocation(500,200);
  54. setSize(400,400);
  55. pack();
  56.  
  57.  
  58. }
  59.  
  60. public static void main (String args[]){
  61.  
  62. new mueveCosasDibujables();
  63. }
  64.  
  65.  
  66. }

Un saludo y gracias de antemano.
« Última modificación: 29 Julio 2010, 10:41 am por Debci » En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame
« Respuesta #3 en: 29 Julio 2010, 09:08 am »

si lo colocas asi debería acomodarse

   
Código
  1. pack();
  2. 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 Desconectado

Mensajes: 9


Ver Perfil
Re: No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame
« Respuesta #4 en: 29 Julio 2010, 09:42 am »

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:
Código
  1. public mueveCosasDibujables() {
  2.  
  3. super("Dibujador de cosas");
  4. setSize(400,400);
  5. setLayout(new BorderLayout());

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

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: No se me dibujan los componentes gráficos hasta que modifico el tamaño del Frame
« Respuesta #5 en: 29 Julio 2010, 17:25 pm »

mmm que raro, el código a mi me funciona bien  :-\
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines