根据用户的JTextField值动态更新JTextArea

时间:2015-02-27 14:06:58

标签: java swing jtextfield jtextarea

我有两个JTextField从用户那里获取数字,如下所示:

nbMuscle = new JTextField();
nbMuscle.setText("2");

和此:

nbFuyard = new JTextField();
nbFuyard.setText("1");

我的JTextArea()会添加两个JTextField的值,如下所示:

nbPersonnages = new JTextArea();
int nombMusc = Integer.valueOf(nbMuscle.getText());
int nombFuy = Integer.valueOf(nbFuyard.getText());
int nbTotal = nombMusc + nombFuy;
nbPersonnages.setText(String.valueOf(nbTotal));

它就像一个魅力,但我有一个问题,如果用户编辑其中一个JTextFields,JTextArea值不会改变。我在互联网上发现了一些像jTextArea.appened(String str)这样的概念,但它不起作用。

知道我能做什么吗?

1 个答案:

答案 0 :(得分:4)

您必须向TextFields的基础DocumentListener添加Document以收听程序运行时所做的更改。
最简单的方法是使用匿名类。 这是代码:

nbMuscle = new JTextField();
nbMuscle.setText("2");
nbFuyard = new JTextField();
nbFuyard.setText("1");

nbPersonnages = new JTextArea();

DocumentListener dl = new DocumentListener() {

    @Override
    public void removeUpdate(DocumentEvent e) {
        textChanged();
    }

    @Override
    public void insertUpdate(DocumentEvent e) {
        textChanged();
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        // This method is not called when the text of the Document changed, but if attributes of the Document changed.
    }

    private void textChanged() {
        int nombMusc = Integer.valueOf(nbMuscle.getText());
        int nombFuy = Integer.valueOf(nbFuyard.getText());
        int nbTotal = nombMusc + nombFuy;
        nbPersonnages.setText(String.valueOf(nbTotal));
    }
};

int nombMusc = Integer.valueOf(nbMuscle.getText());
int nombFuy = Integer.valueOf(nbFuyard.getText());
int nbTotal = nombMusc + nombFuy;
nbPersonnages.setText(String.valueOf(nbTotal));

nbMuscle.getDocument().addDocumentListener(dl);
nbFuyard.getDocument().addDocumentListener(dl);