2017-05-03 6 views
-1

は、ここで私は下に取り組んできているコードです:Javaを使用して2つのGUIスライダを互いに独立して動作させるにはどうすればよいですか?

package ASG2; 

import javax.swing.*; 
import java.awt.*; 
import javax.swing.event.*; 

public class GUI extends JFrame 
{ 
    JSlider slider; 
    JLabel label; 

    public GUI() 
    { 
     setLayout(new FlowLayout()); 
     slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0); 
     slider.setMajorTickSpacing(1); 
     slider.setPaintTicks(true); 
     add(slider); 

     label = new JLabel("Current value: 0"); 
     add(label); 

     event b = new event(); 
     slider.addChangeListener(b); 

     setLayout(new FlowLayout()); 
     slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0); 
     slider.setMajorTickSpacing(1); 
     slider.setPaintTicks(true); 
     add(slider); 

     label = new JLabel("Current value: 0"); 
     add(label); 

     event c = new event(); 
     slider.addChangeListener(c); 
    } 

    public class event implements ChangeListener 
    { 
     public void stateChanged(ChangeEvent a) 
     { 
      int value = slider.getValue(); 

      label.setText("Current value: " + value); 
     } 
    } 

    public static void main(String args[]) 
    { 
     GUI asg2 = new GUI(); 
     asg2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     asg2.setSize(500,500); 
     asg2.setVisible(true); 
     asg2.setTitle("Slider program"); 
    } 
} 

私は2つのスライダーを持って、底面のみ1は、現在の値を取得しています。一番上のものが正しくスライドしていますが、現在の値は変更されません。私はどちらも互いに独立して働くことができる方法はありますか?

答えて

3

現在の値のみを取得しています。 「スライダー」変数が作成された最後のJSliderのに設定されているためである

slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0); 
add(slider); 
... 
slider = new JSlider(JSlider.HORIZONTAL, 0, 5, 0); 

スライダ変数を削除します。だから今、あなたがイベントを生成したコンポーネントへのアクセス権を持っている

public void stateChanged(ChangeEvent a) 
{ 
    JSlider slider = (JSlider)e.getSource(); // added 
    int value = slider.getValue(); 

    label.setText("Current value: " + value); 
} 

代わりにあなたのリスナーのコードは次のようになります。

関連する問題