JAVA 给一道题 做好 50分

JFrame上有个JTextField。要求里面只能输入符合double类型的数值像111,,-111,111.21(再输入.已经输不进应为不可能有两个小数点)反正一切不... JFrame 上有个JTextField 。要求里面只能输入 符合double类型的数值
像111,,-111,111.21(再输入 .已经输不进 应为不可能有两个小数点)
反正一切不合法的的值都输不进 做好送50分
一楼程序 非法的字符是可以输入的。 怎么让让他输不进
高级魔法师 你的程序 不行 啊 输入快了就有问题! 还不及一楼的程序啊
展开
 我来答
帐号已注销
2009-06-05 · TA获得超过5621个赞
知道大有可为答主
回答量:1459
采纳率:0%
帮助的人:1353万
展开全部
用 KeyListener 在按键时判断。等我写好程序贴上来。

import javax.swing.*;
import java.awt.event.*;

public class DoubleInput {
private JFrame mainFrame;
private JTextField textField;
private String str;

public DoubleInput () {
str = "";
mainFrame = new JFrame ("shuangwhywhy");
mainFrame.setLayout(null);
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setBounds(300,100,500,300);

textField = new JTextField();
textField.setBounds (50,50,300,25);
textField.addKeyListener(new KeyListener () {
public void keyReleased (KeyEvent ke) {
try {
Double.parseDouble(textField.getText());
str += ke.getKeyChar();
} catch (NumberFormatException nfe) {
textField.setText(str);
}
}
public void keyPressed (KeyEvent ke) {}
public void keyTyped (KeyEvent ke) {
try {
Double.parseDouble(textField.getText());
} catch (NumberFormatException nfe) {
textField.setText(str);
}
}
});

mainFrame.add(textField);
mainFrame.setVisible(true);
}

public static void main(String[] args) {
new DoubleInput();
}
}
希茜Cqa68
2009-06-05 · TA获得超过1238个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:1060万
展开全部
//根据“飞蛋蛋”的建议,程序一修改好

import javax.swing.*;
import java.awt.*;
import javax.swing.text.*;
import javax.swing.event.*;

public class DocumentTest extends JFrame {
private static final long serialVersionUID = 1L;
JTextField text=null;

public DocumentTest() {
super("DocumentTest");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((d.width - 570) / 2, (d.height - 215) / 2, 570, 215);

text = new JTextField(20);
text.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
final Document document = e.getDocument();
try {
new Thread(new Thread() {
public void run() {
try {
//根据“飞蛋蛋”的建议,我把这里的程序改了一下
String a = text.getText().trim();;
boolean isNumber = a.matches("-?\\d+[.]?(\\d+)?");
if(!isNumber){
document.remove(0, document.getLength());
}
} catch (Exception e) {
e.printStackTrace();

}
}
}).start();
} catch (Exception ex) {
System.out.println("Error: " + ex.toString());
}

}

public void removeUpdate(DocumentEvent e) {
}

public void changedUpdate(DocumentEvent e) {

}
});

JPanel pane = new JPanel();
pane.add(text);
setContentPane(pane);
setVisible(true);
}

public static void main(String[] args) {
new DocumentTest();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大漠小北
2009-06-05 · TA获得超过1138个赞
知道小有建树答主
回答量:365
采纳率:0%
帮助的人:453万
展开全部
……
事件处理倒是简单,判断是否符合double类型比较难点,用string转double的异常来判断肯定达不到效果,你把“0”转成double可以,你把“00000”转成double也可以,但是你的“00000”肯定不符合要求了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞蛋蛋
2009-06-05 · TA获得超过973个赞
知道小有建树答主
回答量:816
采纳率:0%
帮助的人:643万
展开全部
楼上和楼上的楼上搞的这么麻烦。。直接用正则就OK,
拿到的输入的值保存为
String a = 你的value;
boolean isNumber = a.matches("^(-?\\d+)(\\.\\d+)?$")
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式