2011-12-17 4 views
-3

У меня есть 3 поля JText в моей форме. Первые два поля для получения mark1 и mark2, наконец, для отображения суммы метки 1 и метки2.JTextfield Дополнение через программу

Проблема заключается в том, что когда я вводим значение в mark1, оно должно отображаться в полном поле. Также, когда я ввожу значение mark2, значение метки 1 плюс значение поля mark2 необходимо будет немедленно добавить в полное поле с помощью java-кода?

Примечание. Я не хочу использовать кнопку для вычисления суммы.

+0

** Примечание не использовать кнопку, чтобы добавить ** Конечно. BTW - у вас возник вопрос, какой-либо код, какой-либо ... попытка выполнить свою собственную работу, прежде чем надеяться, что кто-то другой сделает это за вас? 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 и концепция ключевых привязок. – camickr

+0

@camickr: Спасибо за ввод, изменили мой ответ. – bragboy

+0

Опять же, как правило, DocumentFilter будет предпочтительнее настраиваемого документа. Я знаю, что в этом случае это не имеет большого значения, но DocumentFilter может быть добавлен в любой документ, поэтому потенциально один и тот же фильтр можно использовать с JTextField, JTextArea, JEditorPane, JTextPane. Цель DocumentFilter - отфильтровать входные данные перед их добавлением в документ. Вы в основном заново изобрели колесо, используя специальный документ, чтобы обеспечить ту же функциональность. – camickr

Смежные вопросы