0

新しい JSlider の作成時に変更リスナーを追加して定義することはできますか?

JSliders を作成して追加する必要がある順序は、JSliders を事前に定義できないことを意味するため、事前に保存する方法がありません。

基本的に: 私は JSliders に名前を付けていませんが、変更されたものを特定する方法が必要です。

私が疑問に思っていることがあまり明確でない場合は、後でいくつかのサンプルコードでこれに追加します

編集:

具体的には、最小値を表す 1 つの JSlider と最大値を表す 1 つの JSlider があるとします。これを使用して、後で表示される顧客 ID などの数値の範囲を表す必要があります。

4

1 に答える 1

4

スライダーがスコープ外で定義されている (つまり、イベント リスナーが変数を参照する方法がない) 場合は、スライダーに「名前」を指定して、検索して比較することができます。

JSlider slider = new JSlider();
slider.setName("funky");

//...//

public void stateChanged(ChangeEvent e) {
    Object source = e.getSource();
    if (source instanceof JSlider) {
        JSlider slider = (JSlider)source;
        String name = slider.getName();
        if ("funky".equals(name)) {
            // Do funky stuff
        }
    }
}

ただし、JSliderクラス レベル フィールドとして定義すると、イベント ソースの参照を定義済みのスライダーと比較できます...

private JSlider slider;

//...//

slider = new JSlider();
slider.setName("funky");

//...//

public void stateChanged(ChangeEvent e) {
    if (slider == e.getSource()) {
        // Do funky stuff
    }
}

現実的には、可能であれば、各スライダーに独自のリスナーを与え、ソースから直接処理する必要があります...

JSlider slider = new JSlider();
slider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        JSlider slider= (Slider)e.getSource();
        // Do funky stuff
    }
});
于 2013-03-20T01:31:38.693 に答える