为什么我的JButton图标显示不正确?

时间:2016-03-17 13:13:43

标签: java swing jbutton

我目前正在制作一些摇摆应用。

当我尝试让JButton显示其图标时,它会启动  重叠两个JButton Icon。

有没有人知道可能导致它的原因(我有一个图标  说'yes',第二个说'no'

如果我将鼠标移到一个按钮上(让我们说它是'是'按钮)  然后在另一个上做(在这种情况下没有'按钮)  'yes''no'上绘制。

注意:为注释

标记的代码添加了解决方案
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class RunnerTestButtons {

public static void main(String[] args) {
    JFrame frame =new JFrame("Game");
    JPanel panel =new JPanel();
    panel.setLayout(new GridLayout(2, 1));
    frame.setPreferredSize(new Dimension(640, 480));
    panel.setBackground(new Color(0, 255, 0));
    JLabel label =new JLabel("SomeText",SwingConstants.CENTER);
    //here
    label.setOpaque(false);
    JPanel panel2 =new JPanel();
    //and here
    panel2.setOpaque(false);

    panel.add(label);
    panel.add(panel2);
    panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS));


    JButton lab1=new JButton("txt");
    JButton lab2=new JButton("Boo");
    lab1.setAlignmentX(Box.CENTER_ALIGNMENT);
    lab2.setAlignmentX(Box.CENTER_ALIGNMENT);
    lab1.revalidate();
    lab2.revalidate();
    lab1.repaint();
    lab2.repaint();
    panel2.add(Box.createHorizontalGlue());
    panel2.add(lab1);
    panel2.add(Box.createHorizontalGlue());
    panel2.add(lab2);
    panel2.add(Box.createHorizontalGlue());
    lab1.setOpaque(false);
    lab2.setOpaque(false);

    lab1.setContentAreaFilled(false);
    lab2.setContentAreaFilled(false);

    lab1.setBorderPainted(false);
    lab2.setBorderPainted(false);



    lab1.setBorder(null);
    lab2.setBorder(null);

    frame.add(panel);
    frame.pack();
    frame.setVisible(true);

}

}

1 个答案:

答案 0 :(得分:2)

lab1.setBackground(new Color(0, 0, 0, 0));

问题在于您正在尝试使按钮透明。你不应该通过玩背景的不透明度来做到这一点。

对于完全透明,最简单的解决方案是只使按钮不透明。

所以你应该这样做:

//lab1.setBackground(new Color(0, 0, 0, 0));
lab1.setOpaque(false);
lab1.setContentAreaFilled(false);

查看Backgrounds With Transparency以获取有关原始方法出现问题的原因的更多信息以及使用部分透明度时的解决方案。

因此,您可以看到您发布的原始代码与问题无关,这就是为什么每个问题都应该发布适当的SSCCE。