我的表单中有3个JText字段。前两个字段用于获取mark1和mark2,最后一个用于显示mark1和mark2的总和。JTextfield通过程序添加
问题是当我在mark1中输入一个值时,它应该显示在总字段中。另外,当我输入mark2值时,需要使用java代码将mark1值加mark2字段值立即添加到总字段中?
注意我不想用一个按钮来计算总和。
我的表单中有3个JText字段。前两个字段用于获取mark1和mark2,最后一个用于显示mark1和mark2的总和。JTextfield通过程序添加
问题是当我在mark1中输入一个值时,它应该显示在总字段中。另外,当我输入mark2值时,需要使用java代码将mark1值加mark2字段值立即添加到总字段中?
注意我不想用一个按钮来计算总和。
这里是一个例子。
package sof;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class Test extends JFrame {
JTextField text1 = new JTextField();
JTextField text2 = new JTextField();
JTextField text3 = new JTextField();
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
CustomDocListener cd = new CustomDocListener();
text1.getDocument().addDocumentListener(cd);
text2.getDocument().addDocumentListener(cd);
JPanel pnl = new JPanel(new GridLayout(3, 1));
pnl.add(text1);
pnl.add(text2);
pnl.add(text3);
this.add(pnl);
setSize(200, 100);
setVisible(true);
}
public static void main(String[] args) {
new Test().setVisible(true);
}
class CustomDocListener implements DocumentListener{
public void changedUpdate(DocumentEvent e) {
}
public void insertUpdate(DocumentEvent e) {
fireChange();
}
public void removeUpdate(DocumentEvent e) {
fireChange();
}
private void fireChange(){
int value1 = 0, value2 = 0;
try {
value1 = Integer.parseInt(text1.getText());
} catch (NumberFormatException ne) {
value1 = 0;
}
try {
value2 = Integer.parseInt(text2.getText());
} catch (NumberFormatException ne) {
value2 = 0;
}
text3.setText(value1 + value2 + "");
}
}
}
-1,用于使用KeyListener。如果您想知道文本组件的内容何时发生更改,则应使用DocumentListener。 KeyListener将与AWT一起使用。 Swing有更新更好的类,像DocumentListener,DocumentFilter和Key Bindings的概念。 – camickr
@camickr:感谢您的输入,修改了我的答案。 – bragboy
同样,作为一般规则,DocumentFilter将优于自定义文档。我知道在这种情况下它并不重要,但是可以将DocumentFilter添加到任何Document中,因此可能使用与JTextField,JTextArea,JEditorPane和JTextPane相同的过滤器。 DocumentFilter的用途是在输入添加到Document之前过滤输入。通过使用自定义文档来提供相同的功能,您基本上已经彻底改变了方向盘。 – camickr
**注意不要使用按钮来添加**当然可以。顺便说一句 - 你有没有问题,任何代码,任何......试图在做你自己的工作之前,希望别人会为你做这件事? SO不是代码生成工厂。 –
你已经编写了任何代码。 – RanRag