1

我正在尝试在 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");

    }
}
4

1 回答 1

3

ChangeListener在您的第一种方法中不起作用的原因是您的听众参考sizeActionnull在您注册听众时。

slider.addChangeListener(sizeAction);

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

slider.addChangeListener(this);
于 2012-12-03T13:29:35.990 回答