Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Consulta sobre Interfaz Grafica

Hola que tal , soy nuevo en javahispano y estoy comenzando a programar java en interfaz grafica.
Quisiera pedirles si me pueden ayudar con este problema.
Resulta que quiero crear un JFrame de 400 de ancho por 400 de alto de un color y luego un JPanel de 200 de ancho por 200 de alto de un color distinto al JFrame y dentro del JPanel un boton.

El problema resulta que cuando ejecuto el programa el programa:
*El color del fondo del JFrame no aparece
*El JPanel no es de 200 x 200 como puse

Les dejo el codigo y si me pueden ayudar estaría muy agradecido

main.java

package paquete;

public class main {

public static void main(String[] args) {
InterfazGrafica ventana1= new InterfazGrafica();

}

}


InterfazGrafica.java

package paquete;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;

public class InterfazGrafica extends JFrame {

InterfazGrafica()
{
setTitle("probando");
setSize(400,400);
setVisible(true);
setBackground(Color.red);
Container contentpane = getContentPane();
FlowLayout layout = new FlowLayout();
panel panel1 = new panel();
contentpane.add(panel1);
setLayout(layout);






}

}


panel.java

package paquete;

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JPanel;

public class panel extends JPanel{

panel() {
setSize(200, 200);
setBackground(Color.blue);

boton boton1= new boton();
add(boton1);
}


}

boton.java

package paquete;

import javax.swing.JButton;

public class boton extends JButton {
boton() {
setText("botoonn");
setSize(100,100);

}

}

enero 2, 2014 | Registered Commenterfedealliani

Creo que es porque estás haciendo setVisible() en el propio constructor de la clase InterfazGrafica, y además antes de añadir el resto de componentes (el JPanel y el layout). Prueba a eliminar el setVisible() del constructor y a llamarlo desde main:


package paquete;

public class main {
public static void main(String[] args) {
InterfazGrafica ventana1= new InterfazGrafica();
ventana1.setVisible(true);
}
}

Aunque lo de arriba es la corrección mínima, cualquier programa que use Swing debería lanzar la interfaz gráfica en el EDT, según se indica en este artículo de Oracle. Por tanto, lo mejor sería hacerlo así:


public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// No es necesario declarar una variable si no vas a
// referenciar el objeto en ninguna parte del código
new InterfazGrafica().setVisible(true);
}
});
}

enero 2, 2014 | Registered Commenterrickiees

Muchas gracias por la respuesta.
He probado lo que me dijiste de poner el setvisible() en el main y borrarlo de la clase InterfazGrafica y no me pone el color de fondo que quiero.
Voy a seguir probando!

enero 3, 2014 | Registered Commenterfedealliani

Aplica el color al Content Pane:

contentpane.setBackground(Color.red);

Por otra parte, mejor usa setPreferredSize en vez de setSize.

enero 3, 2014 | Registered Commenterchoces

Muchas gracias, hice eso que me dijiste y me funciono.
:D

enero 3, 2014 | Registered Commenterfedealliani