2015-07-10 66 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