6

在我的问题中,我有一个不透明的 JPanel 和另一个位于第一个 JPanel 上的半透明(半透明)的 JPanel。当我在顶部 JPanel 上添加单选按钮时。问题是每次我在每个单选按钮的标签区域上输入鼠标时(每次我将鼠标从标签上移开时),它都会变得越来越暗。

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);

}
}

我相信这不是单选按钮的问题,因为在另一种情况下,我观​​察到在相同条件下,如果我将 JLabel 添加到顶部 JPanel,并将侦听器添加到顶部面板,以便 jLabel 文本的颜色将鼠标悬停时更改,鼠标退出时重置为原始颜色,文本在不同的位置重新绘制,如下图所示:-

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

如有必要,我也会发布该代码。我认为这两种情况都存在同样的问题。

4

3 回答 3

8

您可能会因为用于背景的透明颜色而获得这些绘画工件。JComponents 不支持透明色作为背景色。这是@camickr 的一篇好文章,详细解释了该问题并提供了替代解决方案。

于 2012-07-17T03:50:11.323 回答
4

您的结果并不意外,因为默认Graphics2D 组合AlphaComposite.SRC_OVER. 如果您想要不同的结果,则需要使用不同的模式;AlphaComposite.SRC,例如,不是相加的。相关示例可在此处此处此处找到

于 2012-07-17T03:50:30.933 回答
1

而不是使用红色、绿色、蓝色和 alpha 例如: setBackground(new Color(236, 233, 216, 220)); 使用 setBackground(新颜色(236,233,216));这是红色,绿色,蓝色。它将完美地工作。

于 2013-02-26T11:08:11.593 回答