我先要创建一个滑块,旁边有个文本框,想要滑块的值与文本框内的值统一,就分别为这两个组件添加了事件,可是有异常,大家来给看看,谢谢啦
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;public class MyWhy {
private JFrame frame;
private JSlider js;
private JTextField field;

public MyWhy(){
frame=new JFrame();
js=new JSlider(0,255);
field=new JTextField("127",3);

}

public void init(){
frame.add(js,BorderLayout.NORTH);
frame.add(field,BorderLayout.CENTER);
addActionHandle();//添加事件
frame.pack();
frame.setDefaultCloseOperation(3);
frame.setVisible(true);
}

public void addActionHandle(){
//为滑块添加事件
js.addChangeListener(new ChangeListener(){ @Override
public void stateChanged(ChangeEvent e) {
field.setText(String.valueOf(js.getValue()));
}

});
//为文本框添加事件
field.getDocument().addDocumentListener(new DocumentListener(){ @Override
public void changedUpdate(DocumentEvent e) {
js.setValue(Integer.parseInt(field.getText()));
}

@Override
public void insertUpdate(DocumentEvent e) {
js.setValue(Integer.parseInt(field.getText()));
}

@Override
public void removeUpdate(DocumentEvent e) {
js.setValue(Integer.parseInt(field.getText()));
}

});
}

public static void main(String[] args){
new MyWhy().init();
}
}

解决方案 »

  1.   


    把你的代码里的所有@Override都去掉~~
    你用的jdk应该是JDK1.5或以下,Override是一个er annotation类型,它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断言的作用。如果我们使用了这种annotation在一个没有覆盖父类方法的方法时,java编译器将以一个编译错误来警示。
    使用 Java 1.5 不能在 implement 某個 interface method 時使用 @Override annotation,使用 Java 1.6 可以
      

  2.   


    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JSlider;
    import javax.swing.JTextField;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;public class MyWhy {
    private JFrame frame;
    private JSlider js;
    private JTextField field; public MyWhy() {
    frame = new JFrame();
    js = new JSlider(0, 255);
    field = new JTextField("127", 3); } public void init() {
    frame.add(js, BorderLayout.NORTH);
    frame.add(field, BorderLayout.CENTER);
    addActionHandle();// 添加事件
    frame.pack();
    frame.setDefaultCloseOperation(3);
    frame.setVisible(true);
    } public void addActionHandle() {
    // 为滑块添加事件
    js.addChangeListener(new ChangeListener() { @Override
    public void stateChanged(ChangeEvent e) {
    field.setText(String.valueOf(js.getValue()));
    } });
    // 为文本框添加事件
    field.getDocument().addDocumentListener(new DocumentListener() { @Override
    public void changedUpdate(DocumentEvent e) {
    //System.out.println(field.getText());
    js.setValue(Integer.parseInt(field.getText()));
    } @Override
    public void insertUpdate(DocumentEvent e) {
    //System.out.println(field.getText());
    js.setValue(Integer.parseInt(field.getText()));
    } @Override
    public void removeUpdate(DocumentEvent e) {
    //System.out.println(field.getText());
    //js.setValue(Integer.parseInt(field.getText()));
    } });
    } public static void main(String[] args) {
    new MyWhy().init();
    }
    }这样就行了
      

  3.   

    回2楼:我的jdk就是1.6的;
    回3楼:还不行,跟以前一样啊,滑块移动的时候还报异常
      

  4.   

    高手们还是厉害啊,佩服,好久没有看到哦啊swing的东西了
      

  5.   


     @Override
                public void removeUpdate(DocumentEvent e) {
                    //System.out.println(field.getText());
                    //js.setValue(Integer.parseInt(field.getText()));
                }
    按照三楼的应该可以了呀,把那句注释上~~
      

  6.   

    楼主的下面这块似乎没有什么用啊
    //为文本框添加事件 
    field.getDocument().addDocumentListener(new DocumentListener(){ @Override 
    public void changedUpdate(DocumentEvent e) { 
    js.setValue(Integer.parseInt(field.getText())); 
    } @Override 
    public void insertUpdate(DocumentEvent e) { 
    js.setValue(Integer.parseInt(field.getText())); 
    } @Override 
    public void removeUpdate(DocumentEvent e) { 
    js.setValue(Integer.parseInt(field.getText())); 
    } }); 
    } public static void main(String[] args){ 
    new MyWhy().init(); 

      

  7.   

    哎呀复制错了,是这段没用:
    //为文本框添加事件 
    field.getDocument().addDocumentListener(new DocumentListener(){ @Override 
    public void changedUpdate(DocumentEvent e) { 
    js.setValue(Integer.parseInt(field.getText())); 
    } @Override 
    public void insertUpdate(DocumentEvent e) { 
    js.setValue(Integer.parseInt(field.getText())); 
    } @Override 
    public void removeUpdate(DocumentEvent e) { 
    js.setValue(Integer.parseInt(field.getText())); 
    } }); 
    删掉就好了,呵呵。我觉得滑块值是你自己移动的时候就确定了,只需要设定一下文本的显示值就行了,没有必要返回给滑块。