Java Swing 焦点离开时(focuslost),发生是点做其它操作,执行的先后顺序是什么?
1,我在文本框焦点离开时(focuslost)定义了一个check方法,目的是check这个文本框里是否是数字,如果不是,弹出错误提示。2,但是输入时,当光标还在这个文本...
1,我在文本框焦点离开时(focuslost)定义了一个check方法,目的是check这个文本框里是否是数字,如果不是,弹出错误提示。
2,但是输入时,当光标还在这个文本框里的时候,直接点其它按钮,或者触发其它事件,虽然错误消息能正常弹出,但并没有自动终止点击按钮的事件,点击按钮的事件仍然继续执行。 这个问题如何解决?
jdk版本升级前没有这个问题,那个时候的focuslost跟web画面的效果一样,其他处理都能正常中断。升级后问题就发现了。 展开
2,但是输入时,当光标还在这个文本框里的时候,直接点其它按钮,或者触发其它事件,虽然错误消息能正常弹出,但并没有自动终止点击按钮的事件,点击按钮的事件仍然继续执行。 这个问题如何解决?
jdk版本升级前没有这个问题,那个时候的focuslost跟web画面的效果一样,其他处理都能正常中断。升级后问题就发现了。 展开
4个回答
展开全部
这个应该由你来处理。比如出现错误提示后,就终止事件。
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(........){
提示消息。
return;
}
.....................................
}
});
如果你提示消息后没有终止这个事件方法,当然还会继续处理了。
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(........){
提示消息。
return;
}
.....................................
}
});
如果你提示消息后没有终止这个事件方法,当然还会继续处理了。
更多追问追答
追问
你说的这个方法我也尝试过,如果这个画面的按钮比较多的话,每个点击按钮的处理都要追加对这个focuslost项目的判断,可行性不高。而且如果有一些tab迁移,下拉列表等存在的话,就复杂了。
我现在的处理是:
focuslost时,对文本框进行check,有问题的情况用JOptionPane.showOptionDialog弹个消息。
如果我focuslost时,同时按其他按钮,check倒是正常,消息弹出后,不等我按确定,后台直接就走到点击按钮的处理去了。
追答
哦,有些明白你的意思了,
在一个文本框里输入完以后,点了按钮,失去焦点,与点击事件都进行了。
嗯,我想想啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
// This program demonstrates the use of the Swing InputVerifier class.
// It creates two text fields; the first of the text fields expects the
// string "pass" as input, and will allow focus to advance out of it
// only after that string is typed in by the user.
public class VerifierTest extends JFrame {
public VerifierTest() {
JTextField tf1 = new JTextField ("Type \"pass\" here");
getContentPane().add (tf1, BorderLayout.NORTH);
tf1.setInputVerifier(new PassVerifier());
JTextField tf2 = new JTextField ("TextField2");
getContentPane().add (tf2, BorderLayout.SOUTH);
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(l);
}
class PassVerifier extends InputVerifier {
public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
return "pass".equals(tf.getText());
}
}
public static void main(String[] args) {
Frame f = new VerifierTest();
f.pack();
f.setVisible(true);
}
}
setInputVerifier才是你真正想要的。
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
// This program demonstrates the use of the Swing InputVerifier class.
// It creates two text fields; the first of the text fields expects the
// string "pass" as input, and will allow focus to advance out of it
// only after that string is typed in by the user.
public class VerifierTest extends JFrame {
public VerifierTest() {
JTextField tf1 = new JTextField ("Type \"pass\" here");
getContentPane().add (tf1, BorderLayout.NORTH);
tf1.setInputVerifier(new PassVerifier());
JTextField tf2 = new JTextField ("TextField2");
getContentPane().add (tf2, BorderLayout.SOUTH);
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(l);
}
class PassVerifier extends InputVerifier {
public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
return "pass".equals(tf.getText());
}
}
public static void main(String[] args) {
Frame f = new VerifierTest();
f.pack();
f.setVisible(true);
}
}
setInputVerifier才是你真正想要的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你因该在
1、在点击按钮事件中也加上一个检测的过程。这样焦点离开和点击都双重检测。
2、检测文本不合法时,让按钮失效。。不能点击。JButton.setEnable(False);就不会有点击事件
1、在点击按钮事件中也加上一个检测的过程。这样焦点离开和点击都双重检测。
2、检测文本不合法时,让按钮失效。。不能点击。JButton.setEnable(False);就不会有点击事件
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2019-06-06
展开全部
楼主 这个问题到最后是怎么解决的呀?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询