0

プログラムの流れは次のようになります。1番目のボタンのセット()からの画像がleftButtonArea2番目のボタンのセット()にドラッグされますrightButtonArea

各画像には、を介した一意の名前がありsetName()ます。ドラッグされた画像の名前は、ドラッグ先のボタンの名前と比較されます。

名前が一致する場合は、その特定のボタンがホバーイベントに反応しないようにします。

.setHoverEnabled(false)動作しません=/

イベントリスナーの無効化に関する同様のSOスレッドですが、このようなソリューションglass paneはコンポーネント全体を対象としているようです。 リンク

編集: どういうわけかこれは機能しますが、この方法による副作用はわかりません source.removeMouseListener(source.getMouseListeners()[1]);

Edit2: 何か面白いものが見つかりました。これが、無効にされたボタンがまだmouseEventsに反応する理由である可能性があります。

"低レベル:コンポーネント、コンテナ、フォーカス、キー、マウス、ペイント、ウィンドウ

セマンティック:アクション、調整、アイテム、テキスト

コンポーネントを無効にすると、セマンティックイベントのみが影響を受けます。これは、コンポーネントが有効かどうかを認識しているコンポーネント自体によって直接処理されるためです。低レベルのイベントは、無効にしても影響を受けません。ラベルを無効にしたときにこれについて考えるのをやめても、ラベルはまだ表示されていました。もしそうなら、ペイントイベントが起こったに違いありません。低レベルのイベントは常に発生し、コンポーネントが有効かどうかを問い合わせるのはハンドラー次第です。」

// 1st set of 4 buttons
for(int a=0; a<4; a++){

 leftButtonArea[a] = new JleftButtonArea(new ImageIcon(image)); 

 TransferHandler transfer = new TransferHandler("icon");
 leftButtonArea[a].setTransferHandler(transfer);

 leftButtonArea[a].addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e){
    JleftButtonArea leftButtonArea = (JleftButtonArea)e.getSource();
    TransferHandler handle = leftButtonArea.getTransferHandler();
    handle.exportAsDrag(leftButtonArea, e, TransferHandler.COPY);
    // get unique name for the image that is dragged
    // to rightButtonArea
    name1 = e.getComponent().getName();
    }

});

}


// creates 2nd set of 4 buttons
 for(int b=0; b<4; b++){     
     rightleftButtonAreaArea[b] = new JleftButtonArea();

     // <---- creates unique name for each leftButtonArea ----->
     cc2 += 1;
     id2+="a"+cc2;
     rightleftButtonAreaArea[b].setName(id2); 
     // <---- creates unique name for each leftButtonArea ----->

     TransferHandler transfer1 = new TransferHandler("icon");
     rightleftButtonAreaArea[b].setTransferHandler(transfer1);

    rightleftButtonAreaArea[b].addMouseListener(new MouseAdapter(){
    @Override
    public void mouseExited(MouseEvent me){
    JleftButtonArea source = (JleftButtonArea)me.getSource();

    try{
    // compare unique name of image and the button in rightButtonArea
    // if they are the same, disable hover for the button
        if( name1.equals(source.getName())){
            // this doesn't work
            source.getName().setHoverEnabled(false); 
            // Somehow this works, but I am not sure of any side effects from this 
            source.removeMouseListener(source.getMouseListeners()[1]);
        }
        else{   
            source.setIcon(null);
        }
    }
    catch (NullPointerException e) 
    {

    }

    }       

    });
}
4

2 に答える 2

4
于 2013-01-27T11:02:31.000 に答える
0

試す

button.setRolloverEnabled(false);

于 2013-09-24T09:00:53.693 に答える