是一个计算总成绩的程序,有四个框:labs,midterm1,midterm2,final,其中final为总成绩,等于labs*0.3+midterm1*0.35+midterm2*0.35要求在labs,midterm1,midterm2这三个框中输入了新数据(1-100)之后,final框中同时更新数据,但我这个程序只能做到在labs,midterm1,midterm2这三个框中输入了新数据再按一下回车才能在final框中更新数据,请问如何修改能实现同步更新?import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class gradeCal extends JFrame {
private JLabel labs;
private JLabel mt1;
private JLabel mt2;
private JLabel fm;
private JTextField LABS;
private JTextField MT1;
private JTextField MT2;
private JTextField FM;

private class listener implements ActionListener
{
public void actionPerformed(ActionEvent e) {
double labMark = Double.parseDouble(LABS.getText());
double mt1Mark = Double.parseDouble(MT1.getText());
double mt2Mark = Double.parseDouble(MT2.getText());
double finalMark = labMark*0.3 + mt1Mark*0.35 +mt2Mark*0.35;
FM.setText(new Double(finalMark).toString());
}
}
public gradeCal()
{
super("Java Calc");
labs = new JLabel("Labs",JLabel.LEFT);
mt1 = new JLabel("MidTerm1",JLabel.LEFT);
mt2 = new JLabel("MidTerm2",JLabel.LEFT);
fm = new JLabel("Final Mark",JLabel.LEFT);
LABS = new JTextField(10);
LABS.setText("0");
LABS.addActionListener(new listener());
MT1 = new JTextField(10);
MT1.setText("0");
MT1.addActionListener(new listener());
MT2 = new JTextField(10);
MT2.setText("0");
MT2.addActionListener(new listener());
FM = new JTextField(10);
FM.setText("0");
FM.addActionListener(new listener());
GridLayout layout = new GridLayout(4,2,0,100);
JPanel panel = new JPanel(layout);

panel.add(labs);
panel.add(LABS);
panel.add(mt1);
panel.add(MT1);
panel.add(mt2);
panel.add(MT2);
panel.add(fm);
panel.add(FM);
this.setSize(600, 800);
add(panel);
}

public static void main(String[] args) {
gradeCal g = new gradeCal();
g.setVisible(true);
g.setDefaultCloseOperation(EXIT_ON_CLOSE);
}}

解决方案 »

  1.   

    监听器改成下面的样子 private class listener implements DocumentListener {
    public void changedUpdate(DocumentEvent e) {
    }
    public void insertUpdate(DocumentEvent e) {
    try {
    double labMark = Double.parseDouble(LABS.getText());
    double mt1Mark = Double.parseDouble(MT1.getText());
    double mt2Mark = Double.parseDouble(MT2.getText());
    double finalMark = labMark * 0.3 + mt1Mark * 0.35 + mt2Mark * 0.35;
    FM.setText(new Double(finalMark).toString());
    } catch (Exception e1) {
    }
    }
    public void removeUpdate(DocumentEvent e) {
    try {
    double labMark = Double.parseDouble(LABS.getText());
    double mt1Mark = Double.parseDouble(MT1.getText());
    double mt2Mark = Double.parseDouble(MT2.getText());
    double finalMark = labMark * 0.3 + mt1Mark * 0.35 + mt2Mark * 0.35;
    FM.setText(new Double(finalMark).toString());
    } catch (Exception e1) {
    }
    }
    }
      

  2.   

    添加监听改成下面的样子 LABS = new JTextField(10);
    LABS.setText("0");
    LABS.getDocument().addDocumentListener(new listener());

    MT1 = new JTextField(10);
    MT1.setText("0");
    MT1.getDocument().addDocumentListener(new listener());
    MT2 = new JTextField(10);
    MT2.setText("0");
    MT2.getDocument().addDocumentListener(new listener());
    FM = new JTextField(10);
    FM.setText("0");
    FM.getDocument().addDocumentListener(new listener());