2015-07-10 28 views
0

我正在使用Swing表單。當用戶更改TextField中的文本時,我想從其他字段獲取輸入,執行一些計算並顯示結果。我怎樣才能做到這一點?在文本更改上擺動JTextField

這是我到目前爲止有:

jTextField3.addKeyListener(

    new KeyAdapter() { 
     public void keyTyped(KeyEvent e){ 
      char c = e.getKeyChar(); 
      if('0'<=c && c<='9') { 
       String a = jTextField6.getText().toString(); 
       String l = jTextField7.getText().toString(); 
       int m = Integer.parseInt(a); 
       int n = Integer.parseInt(l); 
       jTextField13.setText("" + m*n); 
      } 
     } 
    }); 
+0

請基調不太討厭...這是令人沮喪的人回答它。編輯問題並明確你的問題。 – deezy

+1

還提到您正在獲取什麼錯誤並儘可能附加錯誤日誌 – user3653796

+0

使用DocumentFilter控制可以在字段中輸入的內容以及用於監視更改的DocumentListener。看看[實現文檔過濾器](http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter),[DocumentFilter Examples](http://www.jroller.com/dpmihai/entry/documentfilter)和[偵聽文檔更改](http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#doclisteners)以獲取更多詳細信息 – MadProgrammer

回答

3

如果要監視更改到一個或多個文本字段,你應該使用DocumentListener,這也將爲你提供在用戶通知的粘貼文本字段或字段被編程改變(通過調用setText

例如...

Bunnies

import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 

public class Text { 

    public static void main(String[] args) { 
     new Text(); 
    } 

    public Text() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 

      JTextField field1 = new JTextField(10); 
      JTextField field2 = new JTextField(10); 
      JTextField field3 = new JTextField(10); 

      DocumentListener dl = new DocumentListener() { 

       @Override 
       public void insertUpdate(DocumentEvent e) { 
        updateFieldState(); 
       } 

       @Override 
       public void removeUpdate(DocumentEvent e) { 
        updateFieldState(); 
       } 

       @Override 
       public void changedUpdate(DocumentEvent e) { 
        updateFieldState(); 
       } 

       protected void updateFieldState() { 
        String text = field1.getText() + " " + field2.getText(); 
        field3.setText(text); 
       } 
      }; 

      field1.getDocument().addDocumentListener(dl); 
      field2.getDocument().addDocumentListener(dl); 
      field3.setEditable(false); 

      add(field1); 
      add(field2); 
      add(field3); 
     } 

    } 

} 

現在,您似乎試圖限制可以輸入到字段中的字符。您可以使用JSpinnerJFormattedTextField,但這些僅提供後驗證。

對於實時驗證,您應該使用DocumentFilter,這將允許您在將其應用於底層Document之前攔截在該字段中輸入的內容。

Implementing a DocumentFilterDocumentFilter examples更多細節

+0

我可以知道您使用什麼軟件創建動畫GIF嗎? – user3437460

+1

這是一個商業祕密;)[licecap](http://www.cockos.com/licecap/),它是免費的,並且跨平臺 – MadProgrammer

+0

哈哈,非常感謝:) – user3437460