2016-04-18 11 views
1

現在、ツールチップを使用していくつかのインスタンスJCheckBoxを追加しようとしています。これらのツールヒントは、ユーザーが(ItemListenerを介して)JCheckBoxを選択または選択解除するたびに変更されます。しかし、:JCheckboxを調べるたびに、色(アルファ)が透明になるように変更されるので、背景のアルファベットが変わるようです。私はツールヒントを待つとすぐに元に戻りますが、これはまだ私を少し悩ますものです。ここでツールチップが表示されるまでマウスオーバーで色(アルファ)が変更される

は私のコードです:リスナーの

public class MyBox extends JCheckBox { 

private final String onSelected; 
private final String onNotSelected; 
private int index; 



public MyBox(int index){ 
    super(); 
    this.setDoubleBuffered(true); 
    this.index = index; 
    this.onSelected = "ABC"; 
    this.onNotSelected = "DEF"; 
    this.setToolTipText(this.onNotSelected); 
    super.setOpaque(true); 
    this.setBackground(new Color(0, 0, 255, 80)); 

    Dimension size = new Dimension(10,10); 
    this.setHorizontalAlignment(SwingConstants.CENTER); 
} 

public int getIndex(){ 
    return this.index; 
} 

public void setTooltipFor(boolean selected){ 
    String setto = selected ? onSelected : onNotSelected; 
    this.setToolTipText(setto); 
} 

public void disableEditing(){ 
    this.setEnabled(false); 
} 
} 

そして

public class MyListener implements ItemListener{ 



public MyListener(){ 
} 



@Override 
public void itemStateChanged(ItemEvent ie) { 
    MyBox box =((MyBox) ie.getItemSelectable()); 

    int index = box.getIndex(); 

    if(ie.getStateChange() == ItemEvent.SELECTED){ 
     box.setTooltipFor(true); 
    } 
    else{ 
     box.setTooltipFor(false); 
    } 
} 
} 

別のクラス(作品の追加や変更)に追加されます。問題は残っています:なぜアルファが変わるのですか(色はより不透明で暗くなります)、どうすればそれを避けることができますか?

+2

:次のいずれかを実行でき半透明の背景を使用しています。つまり、コンポーネントが**不透明ではありません。代わりに不透明度をfalseに設定する必要があります。 – kiheru

+0

Swing 'background'プロパティ(' JFrame'を除く)にアルファベースの色を使用しないでください。Swingコンポーネントは半透明ではなく、不透明または透明です。あなたが半透明を望むなら、あなたはそれを偽造する必要があります(例:http://stackoverflow.com/questions/20361432/translucent-jlabel-not-properly-showing-background/20362223#20362223) – MadProgrammer

+0

@kiheru申し訳ありませんが、これは完全に間違っています:色を描画するように、私は半透明の色( "new Color(0、0、255、80)"のように)を設定しようとします。したがって、opque = true - // - - MadProgrammerはこのヒントのおかげですが、これについては分かりませんでした。 – blackwodka86

答えて

3

しかし:毎回、私はJCheckBoxの上に行くあなたが破壊されているのではい、スイングが適切に透明色を処理する方法を知らない、それは色(アルファ)を​​変更するので、あまり透明

なり絵画のルール。

詳しくは、Backgrounds With Transparencyをご覧ください。あなた - ;「`` super.setOpaque(真)」

  1. が絵を行うには、背景を自分
  2. 使ってAlphaContainerクラスのカスタムペイントを行いますあなたのため
関連する問題