Juego "El ahorcado" con GUI.

Iniciado por Aikanáro Anário, 2 Octubre 2011, 08:16 AM

0 Miembros y 1 Visitante están viendo este tema.

Aikanáro Anário

Tengo que hacer una interfaz gráfica que luzca como esto: http://i333.photobucket.com/albums/m399/Link02/ahorcado.gif

Mi ventana hasta ahora luce así: http://i333.photobucket.com/albums/m399/Link02/miventa.png
:xD y no se parece en nada  :rolleyes:. Creo que mi problema está en el layout no sé cuál usar para que me quede así o cuáles métodos usar, he probado con FloWLayout, pero se ajusta y con GridBagLayout que es el que tiene ahora, pero ya ven como está. Además tampoco sé como poner la imagen al lado.

Esta es la parte de la ventana:
Código (java) [Seleccionar]
JFrame f = new JFrame();
f.setTitle("El Ahorcaito");
f.setSize(760,570);
f.getContentPane().setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//menu
mb = new JMenuBar();
menu = new JMenu("Menú");
menu.add(new JMenuItem("Reiniciar"));
menu.addSeparator();
menu.add(new JMenuItem("Salir"));
mb.add(menu);
f.setJMenuBar(mb);
f.setVisible(true);

//posiciones
gbc.gridx = 0;
gbc.gridy= 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
l1 = new JLabel("Palabra:");
f.getContentPane().add(l1,gbc);

gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
l2 = new JLabel("Intentos:");
f.getContentPane().add(l2, gbc);

gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 1;
l3 = new JLabel("Letras:");
String[] list = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"
+"S","T","U","V","W","X","Y","Z"};
JComboBox jcb = new JComboBox(list);
f.getContentPane().add(l3, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 1;
gbc.gridheight = 1;
f.getContentPane().add(jcb,gbc);


gbc.gridx = 0;
gbc.gridy = 4;
gbc.gridwidth = 1;
gbc.gridheight = 1;
l4 = new JLabel("Mensajes:");
f.getContentPane().add(l4, gbc);
}


Veo que se parece un poco a HTML, pero más complicado.

Básicamente lo que necesito es saber como crear un "contenedor" para cada uno de los campos y que queden más separados y alineados a la izquierda.



Ya me ha quedado más o menos, creando paneles:
http://i333.photobucket.com/albums/m399/Link02/mivent.png

Pero ahora ¿Cómo agregó un elemento a un panel? un botón por ejemplo. Estoy intentando hacerlo así:
Código (java) [Seleccionar]
//panel de las palabras
l1 = new JLabel("Palabras:");
gbc.gridx = 0;
gbc.gridy = 0;
f.getContentPane().add(l1,gbc);

Panel panelPalabras = new Panel();
panelPalabras.setLayout(null);
panelPalabras.setSize(360,90);
panelPalabras.setBackground(Color.lightGray);
gbc.gridy = 1;


boton = new JButton();
boton.setText("OK");
boton.setVisible(true);
panelPalabras.add(boton);
f.getContentPane().add(panelPalabras,gbc);
f.setVisible(true);


Pero no aparece el botón.

Solo aparece si lo pongo fuera del panel:
Código (java) [Seleccionar]
f.getContentPane().add(boton);
Lo que faltaba en internet: http://binar10s.blogspot.com/

Leyer

Al frame colocale como layout el GridLayout(rows, cols) y le colocas 1 flas, 2 columnas, luego creas 2 paneles uno que va a hacer el de la izquierda y el otro va a ser el de la derecha y los agregas,luego al panel de la derecha le seteas el layaut  a GridLayout(4, 1), luego creas 4 paneles que seran para  palabras intentos,letras mensajes y los agregas el panel de la derecha luego le colocas un border a cada panel con BorderFactory.createTitledBorder(title) y seria la misma interfaz ;)

Aikanáro Anário

#2
Y qué tipo de  Layouts van a tener los paneles internos? (palabra, letra, mensaje, intentos)?
Y cómo le específico la posición que cada uno de esos paneles va a ocupar? Ej. Si el panel de palabra va a estar en la columna 1, fila 1.




Lo he puesto como he entendido que me dijiste que lo pusieras :P

En los dos primeros paneles (palabras e intentos) a los JLabels le añadí el panel a al que pertenecen, en las otras dos (letras y mensajes) lo hice al revés, al panel le añadí su JLabel. No sé cuál sea la forma correcta, me parece que es como están las dos primeras. En cualquier caso no me salen los nombres de las etiquetas.

Además el panel queda tapado por la ventana, o sea tengo que anchar la ventana o minimizarla para poderlos ver al tamaño completo que tienen.

Así es como se ve: http://i333.photobucket.com/albums/m399/Link02/mivent-1.png

Código (java) [Seleccionar]
//ventana
this.setTitle("El Ahorcaito");
this.setBounds(0,0,760,570);
this.getContentPane().setLayout(new GridLayout(1,2));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

//IZQUIERDO
Panel panelIzq = new Panel();
panelIzq.setLayout(new GridLayout(4,1));

//panel de las palabras
l1 = new JLabel("Palabras:");
Panel panelPalabras = new Panel();
panelPalabras.setLayout(null);
panelPalabras.setSize(360,90);
panelPalabras.setBackground(Color.lightGray);

l1.add(panelPalabras);
panelIzq.add(l1);

//panel de intentos
l2 = new JLabel("Intentos:");
Panel panelIntentos = new Panel();
panelIntentos.setLayout(null);
panelIntentos.setSize(360,90);
panelIntentos.setBackground(Color.lightGray);

l2.add(panelIntentos);
panelIzq.add(l2);

//panel de letras
l3 = new JLabel("Letras:");
Panel panelLetras = new Panel();
panelLetras.setLayout(null);
panelLetras.setSize(360,110);
panelLetras.setBackground(Color.lightGray);

panelLetras.add(l3);
panelIzq.add(panelLetras);

//panel de mensajes
l4 = new JLabel("Mensajes:");
Panel panelMensajes = new Panel();
panelMensajes.setLayout(null);
panelMensajes.setSize(360,110);
panelMensajes.setBackground(Color.lightGray);

panelMensajes.add(l4);
panelIzq.add(panelMensajes);

this.getContentPane().add(panelIzq);

//DERECHO
Panel panelDer = new Panel();
panelDer.setLayout(new GridLayout(1,1));
this.getContentPane().add(panelDer);

//la imagen
l5i = new JLabel();
l5i.setIcon(imagen[0]);
this.getContentPane().add(l5i);


Probe de la forma siguiente y no funciona tampoco:
Código (java) [Seleccionar]
l1 = new JLabel("Palabras:");
JPanel panelPalabras = new JPanel();
panelPalabras.setLayout(new GridBagLayout());
panelPalabras.setSize(360,90);
panelPalabras.setBackground(Color.lightGray);
GridBagConstraints gbc = new GridBagConstraints();

gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridheight = 1;
gbc.gridwidth = 1;
l1.add(panelPalabras,gbc);
gbc.gridy = 1;
panelIzq.add(l1,gbc);





Es que pensaba que el título iba como un label, como en HTML :p. Pero ya veo que no.

Lo cambié así y ahora funciona:
Código (java) [Seleccionar]
JPanel panelPalabras = new JPanel();
panelPalabras.setLayout(null);
panelPalabras.setSize(360,90);
panelPalabras.setBackground(Color.lightGray);
titulo = BorderFactory.createTitledBorder("Palabras");
panelPalabras.setBorder(titulo);

panelIzq.add(panelPalabras);





Ahora no puedo cambiar el ícono de la taza de cafe de java, tengo esta sentencia en el constructor:
Código (java) [Seleccionar]
this.setIconImage(Toolkit.getDefaultToolkit().getImage("icono.gif"));

tampoco funciona esta:
Código (java) [Seleccionar]
this.setIconImage(new ImageIcon(getClass().getResource("icono.gif").getImage()));

la imagen icono.gif está en la carpeta bin del mismo proyecto.
Lo que faltaba en internet: http://binar10s.blogspot.com/