如何从 JTextField 获取字符串并将其保存在变量中的更新?
Posted
技术标签:
【中文标题】如何从 JTextField 获取字符串并将其保存在变量中的更新?【英文标题】:UPDATE of How to get string from JTextField and save it in variable? 【发布时间】:2021-04-19 18:18:28 【问题描述】:我最近遇到了和 4 年前这个人一样的问题。他在那里得到了一些答案,但对他或我都不起作用,然后问题就不再更新了。 How to get string from JTextField and save it in variable?
关键是检查文本字段中输入的内容,如果,例如,文本字段中还有小数点,则使用事件并且不允许添加第二个小数点。
我发现的主要问题是我需要在关键事件中添加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;
);
【问题讨论】:
我正在尝试为带有小数的货币等创建自定义文本字段。 如果您使用 JTextField 输出货币金额,请使用用于格式化文本的字符串类。如果您使用 JTextField 进行输入,请使用 JFormattedTextField。除非您有更多经验,否则不要尝试创建自己的 Swing 组件。 当你声明一个在创建类时被实例化的类级变量时,你如何期望它有一个值,除非它在创建之前以某种方式有文本,它很明显它将是空的。除了说格式化的文本字段对您不起作用并且您在调用getText
时遇到问题之外,您没有给出任何最小的可重现示例或解释您想要实现的目标。你也知道java是开源的,所以你可以看看JFormattedTextField
是如何工作的,并从那里借用代码。至少你应该有一个DocumentFilter
JFormattedTextField source code
不,我首先运行它,在字段中写一些随机数。但是每次中风后的结果仍然是无效的。很抱歉没有说清楚我是新来的。这个文本字段的重点是尽量减少对减号、小数点和数字的输入。我不想使用格式化的文本字段,因为它有预先格式化的小数点,您需要通过箭头键跳过最终会减慢打字速度的内容。我正在为小型会计程序制作它,主要使用数字键盘,你有点键
使用DocumentFilter
,正如我所说的,这里是一个例子***.com/a/14174868/1133011
【参考方案1】:
解决方案
当我使用 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;
);
;
【讨论】:
以上是关于如何从 JTextField 获取字符串并将其保存在变量中的更新?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取“JTextField 数组”的值并将其存储在 Array Integer 中?
如何从存储过程中获取 SQL 字符串结果并将其保存在 C# Windows 应用程序字符串变量中