2012-03-22 15 views
2

私は変更リスナーについて学習していますが、ユーザーがスライダーを動かすときにコーディングの一部が変更リスナーを起動しない理由を知りたいと思います。ChangeListenerが起動していません

ここはリスナーです。すべてが同じ方法である:ここでは

​​

リスナーを追加し、いくつかのコードされています

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ステートメントの1つが実行されていませんでした。 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が最高です。 :-) –

関連する問題