2011-12-17 36 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