2010-12-06 8 views
1
class AngleSlider implements ChangeListener { 
     public void stateChanged(ChangeEvent e) { 
     JSlider source = (JSlider) e.getSource(); 
     if (!source.getValueIsAdjusting()) { 

      double dAngle = (double)source.getValue(); 
      pnlCannon.dCannonAngle=Math.toRadians(dAngle); 
      pnlCannon.repaint(); 

     } 
    } 
} 

これは現在のイベントリスナーです。私が欲しいことをするのに必要なリスナーはいろいろありますか?マウスを離したときだけでなく、スライダーが動いているときに、どのようにしてactionlistenerを呼び出すのですか?

答えて

2

いいえ、のみを削除すると、getValueIsAdjusting()が削除されます。あなたのマウスを移動するときに、これはあなたの大砲を再描画します:

public static void main(String[] args) { 

    JFrame frame = new JFrame("Test"); 

    JSlider slider = new JSlider(); 

    slider.addChangeListener(new ChangeListener() { 
     @Override 
     public void stateChanged(ChangeEvent ce) { 
      System.out.println(((JSlider) ce.getSource()).getValue()); 
     } 
    }); 

    frame.add(slider); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 
+0

感謝します!あなたの最初のコードは完璧に機能しました!最初の場所でif(!source.getValueIsAdjusting())を実装するばかだと思う! – user525479

0

:これは同じことを示した別の例である

class AngleSlider implements ChangeListener { 
    public void stateChanged(ChangeEvent e) { 
     JSlider source = (JSlider) e.getSource(); 

     double dAngle = (double)source.getValue(); 
     pnlCannon.dCannonAngle=Math.toRadians(dAngle); 
     pnlCannon.repaint(); 
    } 
} 

あなたはそれを移動すると、それはスライダーの値を出力します!source.getValueIsAdjusting()は、更新コードフォームの実行を妨げています。

なぜあなたはその状態が必要だと思いますか?