更新如何从 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;
}
});
}
};
我最近 运行 遇到了与 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;
}
});
}
};