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

    }
}

最佳答案

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

slider.addChangeListener(sizeAction);


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

slider.addChangeListener(this);

关于java - JSlider changelistener无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13684207/

10-08 22:52