Несколько JSliders — идентификация изменений

Могу ли я добавить прослушиватель изменений и определить его при создании нового JSlider?

Порядок, в котором мне нужно создавать и добавлять JSliders, означает, что я не могу определить их заранее, поэтому у меня нет способа сохранить их заранее.

По существу: я не назвал JSliders, но мне нужен способ определить, какой из них был изменен.

Добавлю к этому пример кода позже, если не слишком понятно, о чем я спрашиваю.

РЕДАКТИРОВАТЬ:

В частности, представьте, что у меня есть один JSlider для представления минимального значения и один JSlider для представления максимального значения. Мне нужно использовать это для представления диапазона чисел, скажем, идентификаторов клиентов, которые будут отображаться позже.


person user1079404    schedule 20.03.2013    source источник
comment
getSource() Должен помогите объяснить.   -  person    schedule 20.03.2013


Ответы (1)


Если ваши ползунки определены вне области видимости (т. е. у прослушивателя событий нет возможности ссылаться на переменную), вы можете предоставить ползунку «имя», которое вы можете найти и сравнить.

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
    }
});
person MadProgrammer    schedule 20.03.2013
comment
Да, я действительно считаю, что это последнее предложение именно то, что я искал. Возможность дать каждому слайдеру собственный слушатель, вероятно, должна работать лучше, чем то, что я пытался сделать для исправления. Я отвечу о своем успехе завтра, когда я реализовал это - person user1079404; 20.03.2013
comment
+1 для отдельных слушателей, что может упростить сохранение max > min. Также обратите внимание на ползунок диапазона. . - person trashgod; 20.03.2013