我创建了一个使用FocusListener的应用程序,以确保文本fieid的值始终为正数。当用户输入负值,然后单击“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();
}
}
当您在方法中创建同名对象时,侦听器设置为方法对象而不是Class对象。
主要的问题是你在隐藏你的变量
你声明
JTextField posField = new JTextField("30",5);
作为实例变量,但在构造函数中,您重新声明了它。。。
public AlwaysPositive() {
//...
JTextField posField = new JTextField("30",5);
posField.addFocusListener(this);
//...
}
将焦点侦听器附加到它,但在focusLost
方法中,您引用的是实例变量,它不是实际在屏幕上的实例变量
首先更改构造函数中的声明
public AlwaysPositive() {
//...
posField = new JTextField("30",5);
posField.addFocusListener(this);
//...
}
但是,有更好的解决方案可以使用,然后FocusListener
。
例如,您可以使用InputVerifier
,它将允许您验证字段的值并决定是否应该移动焦点。
看看如何使用焦点子系统,特别是验证输入
您还可以使用< code>DocumentFilter来限制用户实际可以输入的内容,在用户键入时过滤输入内容。看看文本组件特性,特别是实现文档过滤器。
你也可以看看这些例子来获得更多的想法
介绍 (Introduction) FocusListener接口用于接收键盘焦点事件。 处理焦点事件的类需要实现此接口。 类声明 以下是java.awt.event.FocusListener接口的声明: public interface FocusListener extends EventListener 接口方法 (Interface methods) SN 方法和描述 1 void f
介绍 (Introduction) FocusListener接口用于接收键盘焦点事件。 处理焦点事件的类需要实现此接口。 Class 声明 (Class Declaration) 以下是java.awt.event.FocusListener接口的声明 - public interface FocusListener extends EventListener 接口方法 Sr.No. 方法和描
我正在用JButtons和JTextFields制作一个程序。ActionListener适用于JButton,但不适用于JTextFields。 在我的Gui构造函数的中间,创建了“金额来自”TextField,然后我添加了一个actionListener。然后,在ActionHandler类的底部,我查找它的事件。但是,当我运行程序(单击“长度”)然后更改文本字段中的金额并按回车键时,我没有得
我试图在最新的AndroidLollipop预览版本中使用elevation属性。我将targetSdk设置为21,将主题设置为Material。接下来,我在TextView中添加了一个背景形状,并将标高设置为8dp,但TextView没有显示任何阴影迹象。这是在运行Lollipop预览的Nexus7上。我还有什么要考虑的吗? 布局如下: 这是可绘制的背景: 以下是文本视图:
问题内容: 我正在尝试将AngularJS用于我的第一个项目(锦标赛经理),并且筛选器不起作用:(我已阅读了有关该文档的所有文档,但无济于事:/ 所以,我在上面定义了vars : 现在,在我看来,我正在尝试重新排序(首先只有一个订单项),但是再也无法工作… 第二次,我要重新排序,从2条信息:和如果第一是平等的。我尝试更换这样的,但如果一个代码没有工作,他绝不会与2工作… 谢谢大家的阅读,对于帖子的
我到处都搜索了,但找不到答案,我怎么能发出HTTP请求?我尝试了几种可能性,但都不起作用。我总是出错。 02-27 17:52:58.611 13571-13571/com.example.app E/AndroidRuntime﹕ 致命异常:主java.lang.IllegalStateException:无法在android.view.view$1.onClick(view.java:3838