2011-12-17 4 views
-3

3 개의 JText 필드가 있습니다. mark1과 mark2를 얻기위한 처음 두 필드, 마지막으로 mark1과 mark2의 합을 표시하는 필드.JTextfield 프로그램을 통해 추가

문제는 mark1에 값을 입력 할 때 전체 필드에 표시되어야한다는 것입니다. 또한 mark2 값을 입력 할 때 mark1 값과 mark2 필드 값을 Java 코드를 사용하여 총 필드에 즉시 추가해야합니까?

참고 합계를 계산하는 데 버튼을 사용하고 싶지 않습니다.

+0

** 참고

enter image description here

는 ** 물론 일을 추가 할 버튼을 사용하지 말아. BTW - 질문이나 코드가 있었습니까? 누군가 다른 사람이 당신을 위해 그것을하기를 희망하기 전에 자신의 일을 시도 했습니까? SO는 코드 생성 팩토리가 아닙니다. –

+1

코드를 작성했습니다. – RanRag

답변

4

다음은 예제입니다.

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의 목적은 입력이 문서에 추가되기 전에 필터링하는 것입니다. 기본적으로 동일한 기능을 제공하기 위해 사용자 지정 문서를 사용하여 휠을 다시 만들었습니다. – camickr