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



我最近遇到了和4年前这个家伙一样的问题。他在那里得到了一些答案,但对他和我都不起作用,然后这个问题就不再更新了。如何从JTextField获得字符串并将其保存在变量中?

关键是检查textfield中输入的内容,如果textfield中还有小数点,则使用事件,不允许添加第二个小数点。

我发现的主要问题是我需要在键事件中添加this,如下所示。但是事件内部的this.语句引用事件本身,而不是JTextField。所以我需要找到绕过或其他解决方案如何编写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;
            }
        });
}
} 

SOLUTION

当我使用lambda表达式时,我意外地在解决方案中运行。您需要使用的公式是类名,然后是.this。在本例中,

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

是解决方案。

但最终,当我知道如何实现JTextField时,我不再需要字符串解决方案。所以我在这里给出了整个代码供以后使用。可以随意使用它作为选择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;
     }
 });
    }
};