2016-10-31 18 views
1

私は作成するすべてのJButtonでこの関数を呼び出していますが、うまくいきます。Java GUIのマウスカーソル

public void addcursor(JButton button) 
{ 
    button.getModel().addChangeListener(new ChangeListener(){ 
     public void stateChanged(ChangeEvent e){ 
      ButtonModel model=(ButtonModel) e.getSource(); 
      if(model.isRollover())     
       setCursor(new Cursor(Cursor.HAND_CURSOR));    
      else 
       setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 

     } 
    }); 
} 

しかし、このコードは、私はJButtonの上を移動する場合にのみ機能します、と私は離れてボタンから移動するときに戻ってデフォルトにマウスカーソルを設定します。だから、別のクラス/関数に:

gui.getRootPane().setCursor(new Cursor(Cursor.WAIT_CURSOR)); 
gui.getRootPane().setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 

これらの2つの機能を呼び出した後、最初の関数addcursor(JButtonのは)私はちょうど後、それがあった方法に戻ってボタンをgetModel設定したい、もう動作しません。カーソルをデフォルトに戻します。私はまた、crusorをデフォルトに設定した後にaddcursoor(JButton)関数を再呼び出ししようとしましたが、それでも機能しませんでした。ありがとうございました。

+0

jbuttonにカーソルを直接設定できないのはなぜですか?なぜそのモデルを監視し、グローバルカーソルを変更するのですか?これにより、競合するカーソル設定の問題が発生する可能性があります。 – Mordechai

+0

私はあなたが習得しようとしているものは不明だ – ControlAltDel

答えて

4

コンポーネントが既にマウス入力されたイベントに変更されますカーソルをサポートしています。

button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 

カーソルはマウス退出イベントにリセットされます。したがって、この種の機能をサポートするために特別なロジックは必要ありません。

setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 

私はいつもsetCursor(null)を使ってカーソルの手動操作を行っています。

+0

私が使用していた機能全体よりずっと簡単で、ありがとう。 – Ahmed