2012-07-17 9 views
6

En mi problema tengo un JPanel opaco y otro JPanel que es translúcido (semitransparente) que se encuentra en el primer JPanel. Cuando agregué botones de opción en el JPanel superior. El problema es que cada vez que paso el mouse sobre el área de la etiqueta de cada botón de radio (y cada vez que muevo el mouse lejos de la etiqueta), se vuelve más oscuro y más oscuro.Oscilación: colocando el mouse sobre la etiqueta del botón de opción en JPanel translúcido

package trial; 

import java.awt.Color; 
import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 

public class Test { 

public static void main(String arg[]){ 
    JFrame rootframe = new JFrame("Test panel"); 
    rootframe.setSize(800, 550); 
    rootframe.setExtendedState(JFrame.MAXIMIZED_BOTH); 

    JPanel basePanel = new JPanel(); //fills rootFrame 
    basePanel.setOpaque(true); 
    basePanel.setBackground(Color.yellow);  

    JPanel panelContainingRadioButtons = new JPanel();//wraps radio buttons 
    panelContainingRadioButtons.setOpaque(true); 
    panelContainingRadioButtons.setBackground(new Color(0,0,0,100)); 

    ButtonGroup buttonGroup1 = new ButtonGroup(); 

    JRadioButton jRadioButton1 = new JRadioButton(); 
    jRadioButton1.setText("Text A..............................."); 
    jRadioButton1.setOpaque(false); 
    jRadioButton1.setForeground(Color.white); 
    buttonGroup1.add(jRadioButton1); 

    JRadioButton jRadioButton2 = new JRadioButton(); 
    jRadioButton2.setOpaque(false); 
    jRadioButton2.setForeground(Color.white); 
    buttonGroup1.add(jRadioButton2); 
    jRadioButton2.setText("Text B......................."); 

    JRadioButton jRadioButton3 = new JRadioButton(); 
    jRadioButton3.setOpaque(false); 
    jRadioButton3.setForeground(Color.white); 
    buttonGroup1.add(jRadioButton3); 
    jRadioButton3.setText("Text C................................"); 

    panelContainingRadioButtons.add(jRadioButton1); 
    panelContainingRadioButtons.add(jRadioButton2); 
    panelContainingRadioButtons.add(jRadioButton3); 

    basePanel.add(panelContainingRadioButtons); 

    rootframe.add(basePanel); 
    rootframe.setVisible(true); 

} 
} 

Creo que esto no es un problema con los botones de radio, ya que, en otra ocasión he observado que en las mismas condiciones, si he añadido un JLabel a la parte superior JPanel, y añadir a los oyentes al panel superior para que el color del texto de JLabel cambiará cuando el ratón sobre, y restablecer el color original cuando se sale de ratón, el texto se redibuja una en diferentes lugares como en la imagen a continuación: -

http://s13.postimage.org/6yn3cw48n/Untitled.png

Si es necesario Voy a publicar ese código también. Creo que es el mismo problema que existe en ambos casos.

Respuesta

8

Obtiene estos artefactos de pintura probablemente debido al color transparente que se utiliza para un fondo. J Los componentes no admiten colores transparentes como colores de fondo. Aquí hay una buena article de @camickr que explica en detalle el problema y también proporciona una solución alternativa.

+1

+1 Buen artículo. – trashgod

+1

Exactamente lo que necesito ... Muchas gracias señor! –

1

En lugar de usar rojo, verde, azul y alfa Ej .: setBackground (nuevo Color (236, 233, 216, 220)); use setBackground (nuevo Color (236,233,216)); que es rojo, verde, azul. Funcionará perfectamente

Cuestiones relacionadas