JSlider changelistener无法正常工作

时间:2012-12-03 13:25:23

标签: java swing jslider

我正在尝试在JSlider上实现changelistener。我尝试过两种不同的方法。注释掉的部分是第一次尝试。现在实施的那个可能更适合我的目的。任何人都可以指出这有什么问题:

public class MixWindow extends JFrame implements ChangeListener{

    private JPanel contentPane;
    public static int uniA [] = new int [512];
    ChangeListener sizeAction;
    int level = 0;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MixWindow frame = new MixWindow();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        initUni();
    }

    public MixWindow() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 800, 600);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JSlider slider = new JSlider(0,255);
        slider.setOrientation(SwingConstants.VERTICAL);
        slider.setBounds(66, 275, 72, 140);
        slider.setPaintTicks(true);
        slider.setMajorTickSpacing(20);
        slider.setValue(uniA[0]);
        //slider.addChangeListener(sizeAction);
        contentPane.add(slider);


        final JLabel label = new JLabel("");
        label.setBounds(66, 262, 61, 16);
        contentPane.add(label);


        /*sizeAction=new ChangeListener()
        {
            public void stateChanged (ChangeEvent event)
            {
                System.out.println("This is getting silly");
                JSlider slider=(JSlider)event.getSource();

                level=slider.getValue();
                uniA[0] = level;
                String temp = String.valueOf(level); 
                label.setText(temp);



            }
        };*/
    }

    public static void initUni(){
        for(int i = 0; i < uniA.length; i++){
            uniA[i] = 0;
          }
    }

    @Override
    public void stateChanged(ChangeEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("Stuff has changed"); 
        Object source = arg0.getSource();
        System.out.println(arg0 + " has Changed");

    }
}

1 个答案:

答案 0 :(得分:3)

ChangeListener在第一种方法中不起作用的原因是,当您注册侦听器时,您的侦听器引用sizeActionnull

slider.addChangeListener(sizeAction);

虽然这不会引发异常,但它在实例化时不会注册侦听器。 只需将此行显示为,在之后定义侦听器,它就会开始工作。 如果您希望使用其他ChangeListener实施,则可以使用:

slider.addChangeListener(this);