• Lunes 23 de Diciembre de 2024, 15:01

Autor Tema:  Problemas con setBackground..  (Leído 1340 veces)

gjbr

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Problemas con setBackground..
« en: Domingo 8 de Agosto de 2010, 19:17 »
0
Hola a todos, tengo una aplicación bastante simple en la que me despliega una degradación de colores. El problema consiste en que el fondo del JFrame se me presenta transparente. He intentado colocar el método setBackground(Color c) en diversos lugares sin resultados algunos. Me podrían ayudar en este problemita por favor.

Agradezco de antemano la ayuda brindada. Trabajo en netbeans 6.9.


import java.awt.*;
import javax.swing.*;
import java.awt.geom.Rectangle2D;

public class EJEMPLOCOLORES extends JFrame {
Container contenedor = getContentPane();

public EJEMPLOCOLORES() {
setTitle("**** Bloques de colores. ****");
} // cierre del constructor

public void paint(Graphics g) {
int limit, rojo, verde, azul, alfa;
float s, x, y, ratio;
Graphics2D gd2 = (Graphics2D) g;
// contenedor.setBackground(Color.white);
Dimension dim = getSize();
gd2.translate(dim.width/2, dim.height/2);
Color[] colors = {Color.WHITE, Color.LIGHT_GRAY, Color.GRAY,
Color.DARK_GRAY, Color.BLACK, Color.RED, Color.PINK,
Color.ORANGE, Color.YELLOW, Color.GREEN, Color.MAGENTA,
Color.CYAN, Color.BLUE};
limit = colors.length;
s = 20;
x = -s * limit/2;
y = -s * 3/2;

// Se muestran los colores predefinidos
for(int i = 0; i < limit; i++) {
Rectangle2D rect = new Rectangle2D.Float(x + s * i, y, s, s);
gd2.setColor(colors);
gd2.fill(rect);
}

// Se muestra un gradiente lineal
y += s;
Color c1 = Color.YELLOW;
Color c2 = Color.blue;
for(int i = 0; i < limit; i++) {
ratio = (float)i/(float)limit;
rojo = (int)(c2.getRed() * ratio + c1.getRed() * (1.0 - ratio));
verde = (int)(c2.getGreen() * ratio + c1.getGreen() * (1.0 - ratio));
azul = (int)(c2.getBlue() * ratio + c1.getBlue() * (1.0 - ratio));
Color color = new Color(rojo, verde, azul, 150);
Rectangle2D rect = new Rectangle2D.Float(x + s * i, y, s, s);
gd2.setColor(color);
gd2.fill(rect);
}

// Se muestra un gradiente alfa
y += s;
c1 = Color.RED;
for(int i = 0; i < limit; i++) {
alfa = (int)(255 * (float)i/(float)limit);
Color color = new Color(c1.getRed(), c1.getGreen(), c1.getBlue(), alfa);
Rectangle2D rect = new Rectangle2D.Float(x + s * i, y, s, s);
gd2.setColor(color);
gd2.fill(rect);
}

// Dibujamos un marco alrededor de los cuadrados
gd2.setColor(Color.BLACK);
gd2.draw(new Rectangle2D.Float(x, y - s * 2, s * limit, s * 3));
} // cierre del método paint.

public static void main(String[] args) {
EJEMPLOCOLORES aplicacion = new EJEMPLOCOLORES();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// aplicacion.setBackground(Color.yellow);
aplicacion.setSize(300, 200);
aplicacion.setLocationRelativeTo(null);
aplicacion.setVisible(true);
} // cierre del método main.
} // CIERRE DE EJEMPLOCOLORES

xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Problemas con setBackground..
« Respuesta #1 en: Lunes 9 de Agosto de 2010, 13:17 »
0
Hola, como dices puede ser perfectamente por que el fondo es trasparente.

Prueba con el objeto al que estas dando color (en este caso gd2 (creo)) cambiarle la propiedad setOpaque(true);

si no es ese objeto cualquiera que sea visible teoricamente tiene la propiedad opaque, asi que prueba con lo que te digo setOpaque(boolean); true para opaco false para trasparente.
Espero que te sirva.
Un saludo!

Perdon, edito creo que al que te referias era a contenedor, no a gd2, pero seria de la misma forma. contenedor.setOpaque(true);