Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema con JLabel con setBackground y setText (texto fuera del label))

Estas en el tema de Problema con JLabel con setBackground y setText (texto fuera del label)) en el foro de Java en Foros del Web. Hola compañeros y espero ser bienvenido ya que soy nuevo xD Sucede que necesito hacer una representacion binaria de un numero en forma de "true" ...
  #1 (permalink)  
Antiguo 28/09/2013, 23:25
 
Fecha de Ingreso: septiembre-2013
Mensajes: 57
Antigüedad: 11 años, 1 mes
Puntos: 0
Problema con JLabel con setBackground y setText (texto fuera del label))

Hola compañeros y espero ser bienvenido ya que soy nuevo xD
Sucede que necesito hacer una representacion binaria de un numero en forma de "true" y "false" mostrando los bits que ocupa con JLabels y tengo que hacer que los Labels primero todos sean blancos y luego poner en amarillo los ceros que adicionan a la izquierda del numero binario es decir el numero 5 en binario es 101 pero como ocupa 8 bits quedaria 00000101 <---- esto iria en labels pero true y false pero me surgen dos problemas y es que cuando trato de cambiar el color de esta forma
Código:
    private void crearJLBinarios(int index,String numero){
      String binario=this.mySistemaBinario.getNumeroBinario(index);
      javax.swing.JFrame ventana=new JFrame("Representacion Binaria");
      ventana.setVisible(true);
      ventana.getContentPane().setLayout(new  BorderLayout());
      javax.swing.JLabel vecJL[]=new JLabel[binario.length()];
      
        for (int i=0;i<vecJL.length;i++) {
            Border borde;
            borde=BorderFactory.createLineBorder(Color.BLACK);
            javax.swing.JLabel mostrarBi=new JLabel();
           
            if(binario.charAt(i)=='0'){
                mostrarBi.setText("false");
            }
            else{
                mostrarBi.setText("true");
            }
            mostrarBi.setBackground(new java.awt.Color(255, 255, 255));
            mostrarBi.setBorder(borde);
           
            vecJL[i]=mostrarBi;
            vecJL[i].setBounds(100+i*50,150,100,30);
            ventana.add(vecJL[i]);
        }
    }
y me queda el ultimo texto fuera del label y si agrego setOpaque(true); entonces me pone todo el panel en blanco :c adjunto imagenes para mas claridad
http://subefotos.com/ver/?2c3ae710a83eafc361413848db156b19o.png#codigos
http://subefotos.com/ver/?3f4494e798e9e9e88573c266c71fd533o.png#codigos
espero que a alguien le haya sucedio y lo haya solucionado para que me ayude
muchas gracias por su colaboracion
  #2 (permalink)  
Antiguo 29/09/2013, 14:58
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Problema con JLabel con setBackground y setText (texto fuera del label))

Hola:

Hay muchos problemas con tu código

- Haz visible la ventana al final, cuando ya esté todo hecho. Si no, la verás antes de que coja tamaño adecuado y tal. Una vez metidos los label, llama al método pack() de la ventana para que coja tamaño automáticamente y luego a setVisible(true)

- Un BorderLayout admite cinco componentes, uno en el centro, uno arriba, otro abajo, otro a la derecha y otro a la izquierda. No puedes poner JLabel alineados. Pon en su lugar un FlowLayout.

- Los label deben tener setOpaque(true) si quieres que tengan color de fondo. Se te queda todo el panel blanco puesto que los label están ocupando ni se sabe qué sitios de la ventana por el layout que has puesto.

- si pones layout, los setBounds() en los label sobran totalmente. El layout se encarga de dar tamaño a los label y "machacará" los setBounds que tú pongas.

- Añade los label con ventana.getContentPane().add(...).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 30/09/2013, 09:06
 
Fecha de Ingreso: septiembre-2013
Mensajes: 57
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Problema con JLabel con setBackground y setText (texto fuera del label))

Muchas gracias chuidiang me sirvieron tus consejos aunque no pude hacer con el FlowLayout porque me ponia las etiquetas con texto en linea pero ya di la solucion anexo el codigo por si alguien algun dia le sucede eso se pueda guiar

Código:
 private void crearJLBinarios(int index,String numero){
      String binario=this.mySistemaBinario.getNumeroBinario(index);
      JPanel contenedor=new JPanel(new GridLayout(1,0));
      JFrame ventana=new JFrame("");
      
      JLabel etiquetaNu=new JLabel("Nombre x "+numero.toString());
      etiquetaNu.setBounds(10,40,500,50);
      etiquetaNu.setFont(new Font("Arial",Font.BOLD,12));
      ventana.getContentPane().add(etiquetaNu);
      
      JLabel etiquetaBi=new JLabel("nombre x"+binario.toString());
      etiquetaBi.setBounds(10,150,500,50);
      etiquetaBi.setFont(new Font("Arial",Font.BOLD,12));
      ventana.getContentPane().add(etiquetaBi);
     
      //No se pero si no lo agrego me muestra uno solo de los de arriba
      JLabel jj=new JLabel("");
      ventana.getContentPane().add(jj);
     
      ventana.getContentPane().setBackground(new Color(234,234,243));
      ventana.getContentPane().add(contenedor);
      contenedor.setBackground(new Color(234,234,243));
      ventana.getContentPane().setLayout(new  BorderLayout());
      JLabel vecJL[]=new JLabel[binario.length()];
      
        for (int i=0;i<vecJL.length;i++) {
            Border borde;
            borde=BorderFactory.createLineBorder(Color.BLACK);
            JLabel mostrarBi=new JLabel();
           
            if(binario.charAt(i)=='0'){
                mostrarBi.setText("False");
            }
            else{
                mostrarBi.setText("True");
            }
            mostrarBi.setBackground(java.awt.Color.WHITE);
            mostrarBi.setBorder(borde);
            mostrarBi.setOpaque(true);
            vecJL[i]=mostrarBi;
            if(binario.length()>50){
                 contenedor.setBounds(1,100,120+i*25,25);
            }else{
                 contenedor.setBounds(1,100,410+i*25,25);
            }
            contenedor.add(vecJL[i]);
        }
        pintarJLBinarios(vecJL);
        ventana.setVisible(true);
        contenedor.setVisible(true);
        ventana.setSize(600,400);
    }
Gracias

Etiquetas: fuera, jlabel, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:12.