The final local variable cannot be assigned, since it is defined in an enclosing type

前端 未结 4 816
名媛妹妹
名媛妹妹 2021-02-05 11:19
ratingS = new JSlider(1, 5, 3); 
ratingS.setMajorTickSpacing(1);
ratingS.setPaintLabels(true);
int vote;

class SliderMoved implements ChangeListener {
    public void s         


        
4条回答
  •  后悔当初
    2021-02-05 11:43

    Move vote to SliderMoved:

    class SliderMoved implements ChangeListener {
        private int vote;
        public void stateChanged(ChangeEvent e) {
            this.vote = ratingS.getValue();
            // do something with the vote, you can even access
            // methods and fields of the outer class
        }
        public int getVote() {
            return this.vote;
        }
    }
    
    SliderMoved sm = new SliderMoved();
    ratingS.addChangeListener(sm);
    
    // if you need access to the actual rating...
    int value = rattingS.getValue();
    
    // ...or
    int value2 = sm.getVote();
    

    EDIT

    Or alternatively, pass a model class to the change listener

    public class Person {
        private String name;
        private int vote;
        public int getVote() {
            return this.vote;
        }
        public void setVote(int vote) {
            this.vote = vote;
        }
        // omitting other setter and getter
    }
    

    Person is used as follows:

     class SliderMoved implements ChangeListener {
        private Person person;
        public SliderMoved(Person person) {
            this.person = person;
        }
        public void stateChanged(ChangeEvent e) {
            this.person.setVote(ratingS.getValue());
        }
        public Person getPerson() {
            return this.person;
        }
    }
    
    Person person = new Person();
    
    ratingS.addChangeListener(new SliderMoved(person));
    
    // access the vote
    int vote = person.getVote();
    

提交回复
热议问题