- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个使用 FocusListener 来确保文本字段的值始终为正的应用程序。当用户输入负值,然后单击“tab”键将焦点从文本字段移开时,该值将乘以-1,从而得到正值。但是,当我运行该应用程序时,文本字段没有改变。我不确定我做错了什么,非常感谢任何帮助。
这是我的代码:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class AlwaysPositive extends JFrame implements FocusListener {
JTextField posField = new JTextField("30",5);
public AlwaysPositive() {
super("AlwaysPositive");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
JTextField posField = new JTextField("30",5);
JButton ok= new JButton("ok");
posField.addFocusListener(this);
pane.add(posField);
pane.add(ok);
add(pane);
setVisible(true);
}
public void focusLost(FocusEvent event) {
try {
float pos = Float.parseFloat(posField.getText());
if (pos < 0)
pos = pos*-1;
posField.setText("" + pos);
} catch (NumberFormatException nfe) {
posField.setText("0");
}
}
public void focusGained(FocusEvent event) {
}
public static void main(String[] arguments) {
AlwaysPositive ap = new AlwaysPositive();
}
}
最佳答案
主要问题是你正在隐藏变量
你声明
JTextField posField = new JTextField("30",5);
作为实例变量,但在构造函数中,您再次重新声明它...
public AlwaysPositive() {
//...
JTextField posField = new JTextField("30",5);
posField.addFocusListener(this);
//...
}
Add 将焦点监听器附加到其上,但在 focusLost
方法中,您引用的是实例变量,它不是实际在屏幕上的变量
首先更改构造函数中的声明
public AlwaysPositive() {
//...
posField = new JTextField("30",5);
posField.addFocusListener(this);
//...
}
但是,还有比 FocusListener
更好的解决方案可以使用。
例如,您可以使用 InputVerifier
来验证字段的值并决定是否应移动焦点。
看看How to Use the Focus Subsystem和 Validating Input特别是
您还可以使用 DocumentFilter
来限制用户实际可以输入的内容,在用户键入时过滤输入。看看Text Component Features和 Implementing a Document Filter特别是。
您还可以查看these examples获取更多想法
关于java - JTextField 上的 FocusListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577854/
我目前正在研究我们小组第一学期考试项目的 GUI 部分,我遇到了一个关于回调和事件处理的奇怪问题。 有点偏离主题:我已经用谷歌搜索了这个问题,但确实找不到任何在 Java 中使用回调的具体示例,所以从
我正在尝试将 focusListener 添加到 JDateChooser,以便当用户选择 dateOfBirth 时,当焦点丢失时,它会在文本字段上显示年龄。但它不起作用这是我尝试过的方法, 导入j
我有一个 JFrame,我想在用户单击它时将其关闭。我有两个 JTextFields 和一个 JButton(用户名、密码、提交)。当我为他们提供所有 FocusListener 时,只要用户从一个字
我必须扩展一些代码来实现一个 ActionListener,该监听器使用 ActionCommands 来获取有关触发 ActionEvent 的组件所属对象的更多信息。 同一段代码现在还应该实现 F
我在 JFrame 中有 2 个文本字段,当焦点从 textfield1 丢失时,我想验证 textfield1 中的数据。因此,我在 FocusLost() 方法中使用了 FocusListener
我一直在研究有关 JInternalFrames 的各种问题,并尝试按照建议实现代码,但我似乎做错了一些事情。我在这里包含的代码将演示我的问题。三个框架已创建,但当您单击并移动它们时,它们不会按预期到
有一个 SWT 文本框。我正在为其设置默认文本。 设置焦点监听器,以便当焦点位于文本框上时,删除默认文本。 设置验证监听器以确保仅输入字母。 但是,当焦点设置在文本框上时,文本不会设置为空。是什么导致
在我的代码中,当我尝试将 FocusListener 添加到 JTextField 时,它说 ChatClient.java:30: error: incompatible types: ChatCl
我有一个文本字段,我必须在其中验证电子邮件。我的问题是,我只想在电子邮件有效时将焦点从文本字段移开。我现在使用 FocusAdapter。有人可以给我一些其他的想法吗? 最佳答案 参见javax.sw
我有 JTextField。我需要保存更改,如果用户在其中写了一些东西然后失去了焦点(比如点击其他地方) mMaxLabelLength = new JTextField(); mMaxLabelLe
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.ne
我创建了一个使用 FocusListener 来确保文本字段的值始终为正的应用程序。当用户输入负值,然后单击“tab”键将焦点从文本字段移开时,该值将乘以-1,从而得到正值。但是,当我运行该应用程序时
一些背景:我是一个相当有经验的 C++ 程序员,但我目前正在自学 Java。 我有一个包含多个 JTextField 的应用程序,我希望在单击某个字段时突出显示该字段的内容。我知道我可以为每个人编写一
我有以下代码: Display display = new Display(); Shell shell = new Shell(display); s
首先:抱歉,我无法提供 SSCCE。我试图在一个小项目上重现这个问题,但没有成功,或者我应该说成功了,因为它在那里工作! 所以这是我的问题:我有一个可编辑的 JCombobox,它应该通过单击编辑器组
此问题出现在my last question here之后。我想将每个按钮聚焦和失去焦点背景设置为主菜单(ContentPane 即 JPanel)下方的背景颜色,因此按钮看起来像选项卡。它在不同的环
我有一个文本框,我想在文本框获得焦点时显示一个对话框。所以我写了以下代码。但是当对话框被处理后,对话框会再次出现。我尝试使用换行符进行调试和检查。那次它不会执行多次,但在正常模式下它会执行多次,因此对
因此,当我单击 JTextfield 中的一个时,我想setText一个名为value的字符串。我读到有关将 FocusListener 添加到 JTextField 的内容,但找不到有关将其添加到
我有两个实现 KeyListener 和 FocusListener 接口(interface)的类。两者都不起作用,但如果我不通过注释或删除以下内容来添加 JButton:add(whiteJBut
我的 Java 应用程序中有数百个 JTextFields,我想在所有这些上添加 FocusListener 以设置文本的水平对齐并在每个文本字段上添加 FocusListener。所以,我做了这个方
我是一名优秀的程序员,十分优秀!