JLabelのシフトコンポーネントの背景を変更します
-
21-09-2019 - |
質問
私が使用していたコードは、次のとおりです。
public class Test extends JFrame implements ActionListener {
private static final Color TRANSP_WHITE =
new Color(new Float(1), new Float(1), new Float(1), new Float(0.5));
private static final Color TRANSP_RED =
new Color(new Float(1), new Float(0), new Float(0), new Float(0.1));
private static final Color[] COLORS =
new Color[]{TRANSP_RED, TRANSP_WHITE};
private int index = 0;
private JLabel label;
private JButton button;
public Test() {
super();
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
label = new JLabel("hello world");
label.setOpaque(true);
label.setBackground(TRANSP_WHITE);
getContentPane().add(label);
button = new JButton("Click Me");
button.addActionListener(this);
getContentPane().add(button);
pack();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(button)) {
label.setBackground(COLORS[index % (COLORS.length)]);
index++;
}
}
public static void main(String[] args) {
new Test();
}
}
私はlabalesはこのようなGUIのルックスに色を変更するにはボタンをクリックし、
任意のアイデアなぜですか?
解決
あなたはJLabelのに半透明であるが、あなたはそれが不透明であることを指定した背景を与えています。それは、描画に使用するGraphicsオブジェクトでのJLabelを提供する前に、この手段は、Swingは、その下のコンポーネントをペイントしないこと。提供グラフィックスは、それがその背景を描画する際に上書きするのJLabelを期待しているジャンクが含まれています。それはその背景を描画するときしかし、それはジャンクが残って半透明である。
あなたが不透明ではありませんが、あなたが欲しいの背景を描画しますオーバーライドさpaintComponentメソッドを持っているのJLabelの拡張を作成する必要がある問題を修正するには、
編集:ここでは例があります:
public class TranslucentLabel extends JLabel {
public TranslucentLabel(String text) {
super(text);
setOpaque(false);
}
@Override
protected void paintComponent(Graphics graphics) {
graphics.setColor(getBackground());
graphics.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(graphics);
}
}
他のヒント
あなたが受け入れられたソリューションを提供する透明度
背景、だけでなく、あなたが興味のあるかもしれないのJLabelを延長することなく使用することができるソリューションをご提供しています。
所属していません StackOverflow