更新如何从 JTextField 获取字符串并将其保存在变量中?

UPDATE of How to get string from JTextField and save it in variable?

我最近 运行 遇到了与 4 年前这个人同样的问题。他在那里得到了一些答案,但对他或我都不起作用,然后问题就不再更新了。 How to get string from JTextField and save it in variable?

重点是检查文本字段中输入的内容,如果像示例中那样,文本字段中还有小数点,则使用事件并且不允许添加第二个小数点。

我发现的主要问题是我需要在按键事件中添加 this,如 belox 所示。但是事件中的 this. 语句引用事件本身而不是 JTextField.So 我需要找到绕过或其他解决方案如何编写 getText 语句

String text = this.getText().toString();

如果有人对如何改进代码也有想法,除了将其重写为格式化字段之外,我愿意接受任何建议,因为从我尝试格式化字段的角度来看,用户体验有点不同。

public class TxtfNumber extends JTextField {

 String text = this.getText().toString();  

 public TxtfNumber(){

KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {

            @Override
            public boolean dispatchKeyEvent(KeyEvent evt) {
                switch (evt.getID()) {
                    case KeyEvent.KEY_TYPED:
                            String text = this.getText().toString();
                            if(evt.getKeyChar()=='.'&& text.contains(".")){
                               evt.consume();
                                } 
                           
                            
                    }

                    return false;
            }
        });
}
} 

解决方案

当我使用 lambda 表达式时,我在解决方案中不小心 运行。您需要使用的公式是 class 然后 .this 的名称。 所以在这种情况下,

String text = TxtfNumber.this.getText().toString();

是解决方案。

但最终,当我知道如何实现 JTextField 时,我不再需要字符串解决方案。所以我在这里给出整个代码供以后使用。随意将其用作 Choose Bean 组件。

它限制用户只能在文本的开头使用一个减号,在任何地方使用一个小数点,然后输入两个小数。

import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import javax.swing.JTextField;


public class TxtfNumber extends JTextField {



    public TxtfNumber(){

 KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
     @Override
     public boolean dispatchKeyEvent(KeyEvent evt) {
         switch (evt.getID()) {
             case KeyEvent.KEY_TYPED:
                 //restricts input charactes
                 if(!Character.isDigit(evt.getKeyChar()) && (evt.getKeyChar()!='.') && (evt.getKeyChar()!='-') && (evt.getKeyChar()!=','))
                     evt.consume();
                 
                 //change , and . for securing of different keyboard language
                 if (evt.getKeyChar()==',')
                     evt.setKeyChar('.');
                 
                 //allow only one decimal dot in text
                 if (evt.getKeyChar()=='.' && TxtfNumber.this.getText().contains(".")) 
                     evt.consume();
                 
                 //allow minus sign only at the start of text
                 if (evt.getKeyChar()=='-' && TxtfNumber.this.getText().length() != 0)
                     evt.consume();
                 
                 //allow two decimal numbers after dot
                 for (int i = -1; (i = TxtfNumber.this.getText().indexOf(".", i + 1)) != -1; i++) {
                     if (i+3 == TxtfNumber.this.getText().length()) 
                         evt.consume();
                 }
                 break;
         }
         return false;
     }
 });

    }
};