JAVA 给一道题 做好 50分
JFrame上有个JTextField。要求里面只能输入符合double类型的数值像111,,-111,111.21(再输入.已经输不进应为不可能有两个小数点)反正一切不...
JFrame 上有个JTextField 。要求里面只能输入 符合double类型的数值
像111,,-111,111.21(再输入 .已经输不进 应为不可能有两个小数点)
反正一切不合法的的值都输不进 做好送50分
一楼程序 非法的字符是可以输入的。 怎么让让他输不进
高级魔法师 你的程序 不行 啊 输入快了就有问题! 还不及一楼的程序啊 展开
像111,,-111,111.21(再输入 .已经输不进 应为不可能有两个小数点)
反正一切不合法的的值都输不进 做好送50分
一楼程序 非法的字符是可以输入的。 怎么让让他输不进
高级魔法师 你的程序 不行 啊 输入快了就有问题! 还不及一楼的程序啊 展开
4个回答
展开全部
用 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();
}
}
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();
}
}
展开全部
//根据“飞蛋蛋”的建议,程序一修改好
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
……
事件处理倒是简单,判断是否符合double类型比较难点,用string转double的异常来判断肯定达不到效果,你把“0”转成double可以,你把“00000”转成double也可以,但是你的“00000”肯定不符合要求了
事件处理倒是简单,判断是否符合double类型比较难点,用string转double的异常来判断肯定达不到效果,你把“0”转成double可以,你把“00000”转成double也可以,但是你的“00000”肯定不符合要求了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上和楼上的楼上搞的这么麻烦。。直接用正则就OK,
拿到的输入的值保存为
String a = 你的value;
boolean isNumber = a.matches("^(-?\\d+)(\\.\\d+)?$")
拿到的输入的值保存为
String a = 你的value;
boolean isNumber = a.matches("^(-?\\d+)(\\.\\d+)?$")
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询