2012-03-22 2 views
2

Я изучаю слушателей изменений и хотел бы узнать, почему часть моего кодирования не создает огонь при прослушивании, когда пользователь перемещает слайдер.ChangeListener не срабатывает

Слушатель. Все в том же методе:

ChangeListener lst = new ChangeListener() { 
    public void stateChanged(ChangeEvent e) { 
     showDate(); 
    } 
}; 

Вот код, который добавляет слушателя:

m_slDay = new JSlider(JSlider.HORIZONTAL, 1, maxDays, 
    m_calendar.get(Calendar.DAY_OF_MONTH)); 
m_slDay.setPaintLabels(true); 
m_slDay.setMajorTickSpacing(5); 
m_slDay.setMinorTickSpacing(1); 
m_slDay.setPaintTicks(true); 

// This line of code seems to work. 
m_slDay.addChangeListener(lst); 

p = new JPanel(); 
p.setBorder(new TitledBorder(new EtchedBorder(), "Day")); 
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); 
p.add(Box.createRigidArea(RIGID_DIMENSION)); 
p.add(m_slDay); 
p.add(Box.createRigidArea(RIGID_DIMENSION)); 
p1.add(p); 

Этот код основан на приведенном выше фрагменте кода, но ничего не происходит, когда пользователь перемещает ползунок:

m_slDayOfWeek = new JSlider(JSlider.HORIZONTAL, 1, maxDaysOfTheWeek, 
    m_calendar.get(Calendar.DAY_OF_WEEK)); 
m_slDayOfWeek.setPaintLabels(true); 
m_slDayOfWeek.setMajorTickSpacing(1); 
m_slDayOfWeek.setMinorTickSpacing(1); 
m_slDayOfWeek.setPaintTicks(true); 

// This one is not working and I'm not sure why it's happening. 
m_slDayOfWeek.addChangeListener(lst); 

p = new JPanel(); 
p.setBorder(new TitledBorder(new EtchedBorder(), "Day of Week")); 
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); 
p.add(Box.createRigidArea(RIGID_DIMENSION)); 
p.add(m_slDayOfWeek); 
p.add(Box.createRigidArea(RIGID_DIMENSION)); 
p1.add(p); 
+1

Я не могу не подозревать, что проблема находится в одной из строк, которые вы не отправляли. Что делает метод showDate()? Вы пытались помещать в него контрольные точки или инструкции println, чтобы проверить, достигнуто ли это? –

+1

Что делает ваш метод 'showDate()'? Можете ли вы добавить точку останова или некоторые операторы отладки syserr в этом месте, чтобы доказать себе, что ничего не происходит? –

+1

Спасибо всем. Хороший улов. Это было в методе showDate(). Одно из операторов if не выполнялось. Использование System.out.println() доказало, что метод выполнялся, но не был частью моего кода. –

ответ

3

Похоже есть что-то не так в вашей части кода, как указано в комментариях в вашем методе showDate(), эта вещь работает безупречно в этом коде:

import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class SliderChangeEffect extends JFrame 
{ 
    private JSlider slider; 
    private int count = 0; 
    private ChangeListener changeListener = new ChangeListener() 
    { 
     public void stateChanged(ChangeEvent ce) 
     { 
      System.out.println(count++); 
     } 
    }; 

    private void createAndDisplayGUI() 
    { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationByPlatform(true); 

     JPanel contentPane = new JPanel(); 
     contentPane.setOpaque(true); 

     slider = new JSlider(0, 10, 5); 
     slider.setMajorTickSpacing(2); 
     slider.setMinorTickSpacing(1); 
     slider.addChangeListener(changeListener); 

     contentPane.add(slider); 

     getContentPane().add(contentPane); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new SliderChangeEffect().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 
+0

@ Emad-ud-deen: Добро пожаловать, Рад, что этот пример помог вам где-то в ваших усилиях :-) –

+0

Stackoverflow - лучший. :-) –

Смежные вопросы