3

JSliderとJLabelを含む単一のJPanelがあります。JSliderの値がユーザーによって変更されたときに、その新しい値がJLabelに反映されるように構成したいと思います。

Sliderを使用してChangeEventsを起動できることは理解していますが、ChangeListenerをJLabelに追加する方法がわかりません。これが私のコードの抜粋です。

scaleSlider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent event)
    {
        int currentTime = ((JSlider)event.getSource()).getValue();
        doSomething(currentTime);
        fireStateChanged(event);
    }

JLabel timeValue = new JLabel("Time: " + scaleSlider.getValue());
timeValue.add??? 

(スライダーの変更を反映するために、ここで何をすべきかわかりません)

私はこれで正しい方向に進んでいますか?よろしくお願いします。

4

3 に答える 3

5

JLabelでChangeEventsをリッスンしません。JSliderでChangeEventsをリッスンしてから、stateChanged()メソッドで単に使用します

label.setText("Time: " + scaleSlider.getValue());

ChangeLisetnerからイベントを発生させる必要もありません。

于 2009-08-06T15:32:32.250 に答える
3

JLabel に変更リスナーを追加する必要はありません。JLabel がコードを含むクラスのメンバー フィールドである場合、次のように JSlider の変更リスナー内で JLabel を参照できます。

public class Test() {
    private JLabel label;

    private void setup() {
        label = new JLabel();
        JSlider scaleSlider = new JSlider();
        scaleSlider.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent event) {
                int currentTime = ((JSlider)event.getSource()).getValue();
                label.setText(currentTime);
            }
        }
    }
}

scaleSlider で宣言した匿名の内部クラス ChangeListener であっても、内部クラス内の外部クラスのフィールドを参照できます。

于 2009-08-06T15:36:49.870 に答える
2

あなたがする必要があるのは、スライダーに変更リスナーを追加することです。

次に、実装する必要のあるchangeメソッドで、のテキストの値を変更しますJLabel

コードに関して、doSomething(int)メソッドが実行する必要があるのは次のとおりです。

label.setText(currentTime + "");
于 2009-08-06T15:30:14.190 に答える