2011-12-17 35 views
-3

我的表单中有3个JText字段。前两个字段用于获取mark1和mark2,最后一个用于显示mark1和mark2的总和。JTextfield通过程序添加

问题是当我在mark1中输入一个值时,它应该显示在总字段中。另外,当我输入mark2值时,需要使用java代码将mark1值加mark2字段值立即添加到总字段中?

注意我不想用一个按钮来计算总和。

+0

**注意不要使用按钮来添加**当然可以。顺便说一句 - 你有没有问题,任何代码,任何......试图在做你自己的工作之前,希望别人会为你做这件事? SO不是代码生成工厂。 –

+1

你已经编写了任何代码。 – RanRag

回答

4

这里是一个例子。

enter image description here

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 + ""); 
     } 

    } 
} 
+0

-1,用于使用KeyListener。如果您想知道文本组件的内容何时发生更改,则应使用DocumentListener。 KeyListener将与AWT一起使用。 Swing有更新更好的类,像DocumentListener,DocumentFilter和Key Bindings的概念。 – camickr

+0

@camickr:感谢您的输入,修改了我的答案。 – bragboy

+0

同样,作为一般规则,DocumentFilter将优于自定义文档。我知道在这种情况下它并不重要,但是可以将DocumentFilter添加到任何Document中,因此可能使用与JTextField,JTextArea,JEditorPane和JTextPane相同的过滤器。 DocumentFilter的用途是在输入添加到Document之前过滤输入。通过使用自定义文档来提供相同的功能,您基本上已经彻底改变了方向盘。 – camickr