根据用户 JTextField 值动态更新 JTextArea

Update a JTextArea dynamically depending on users JTextField values

我有两个 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) 但它不起作用。

知道我能做什么吗?

您必须将 DocumentListener 添加到 TextFields 的基础 Document 以侦听程序运行时所做的更改。
最简单的方法可能是匿名 class。 这是代码:

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);