如果新的Frame显示setEditable(false),如果用户关闭它setEditable(true)

时间:2012-05-11 11:22:05

标签: java swing exception jframe jtextfield

我想创建此代码: 用户输入一个数值,如果他输入了字符,它将抛出异常 该字段将停止工作,然后显示另一个框架并显示错误消息 用户关闭新框架后,一切都恢复原状 这意味着该领域将再次运作! 我设法使该字段停止工作,但我不知道用户是否关闭了新框架! 这是我的尝试

public void keyReleased(KeyEvent event) {

try{
double l,h,w;
l=Double.parseDouble(input_length.getText());
w=Double.parseDouble("0"+input_width.getText());
h=Double.parseDouble("0"+input_width.getText());
}

catch(NumberFormatException a){


input_length.setEditable(false);
input_height.setEditable(false);
input_width.setEditable(false);

JFrame ErrorFrame = new JFrame("Error");
JPanel content = new JPanel(); ;
ErrorFrame.setContentPane(content);

ErrorFrame.setSize      (350, 150);
ErrorFrame.setResizable (false);
ErrorFrame.setLocation  (FRAME_X_ORIGIN, 250);

content.setLayout(new FlowLayout());
JLabel text = new JLabel(" ERROR ! please Enter number only ",JLabel.CENTER);
text.setFont(new Font("Arial", Font.PLAIN, 20));
text.setForeground(Color.red);
content.add(text);
ErrorFrame.setVisible(true);

setDefaultCloseOperation(ErrorFrame.EXIT_ON_CLOSE);
int op = ErrorFrame.getDefaultCloseOperation();

if(op == 1 ){
input_length.setEditable(true);
input_height.setEditable(true);
input_width.setEditable(true);}

}
}

2 个答案:

答案 0 :(得分:2)

1)。不要将新的JFrame用于错误消息 - 请使用JDialog Here is how

2)。 h=Double.parseDouble("0"+input_width.getText());我认为您的意思是input_height.getText(),而不是input_width.getText()

3)。显示错误对话框后,只需清除文本字段即可 - 没关系。当用户关闭它时 - 他会看到它们是空的。

答案 1 :(得分:1)

  1. 如果您选择模式对话框来显示错误消息,则无需更改字段的可编辑状态。
  2. 就个人而言,如果我每次打错都会显示对话框,我会变得非常恼火。例如,在无效输入上将文本字段的背景颜色更改为红色,并禁用“确定”按钮(或用户指示您已完成编辑的任何机制)是更加用户友好的IMO。您甚至可以显示一个标签,指示面板中的错误,或工具提示,....
  3. 如果您想对文本字段中的文字更新做出反应,我还建议使用DocumentListener代替KeyListener
  4. 为什么我建议选择其他机制来通知用户错误的示例: 我在文本字段中粘贴了无效值(例如3x456)并弹出一个对话框。现在我想使用我的箭头键导航到错误并更正它。这意味着我必须向左导航3个位置才能删除x。如果我使用我的箭头键(也是键),我将在导航过程中再次看到此对话框3次。