Если появится новый фрейм setEditable(false), если пользователь закроет его setEditable(true)

Я хочу создать этот код: пользователь вводит числовое значение, если он ввел символ, он вызовет исключение, поле перестанет работать, затем появится другой кадр и отобразится сообщение об ошибке после того, как пользователь закроет новый кадр, все вернется к тому, как это это значит, что поле снова заработает! Мне удалось заставить поле перестать работать, но я не знал, закрыл ли пользователь новый фрейм или нет! вот моя попытка

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);}

}
}

person Aya Senpai    schedule 11.05.2012    source источник
comment
Вы настроены на использование JFrame в качестве сообщения об ошибке? Я думаю, что JDialog будет работать лучше. docs.oracle.com/javase/6/docs/api   -  person twain249    schedule 11.05.2012
comment
Я должен использовать JFrame, это то, что они хотят   -  person Aya Senpai    schedule 12.05.2012


Ответы (2)


1). Не используйте новый JFrame для сообщения об ошибке — используйте JDialog вот как

2). h=Double.parseDouble("0"+input_width.getText()); я думаю, что вы имели в виду input_height.getText() здесь, а не input_width.getText()

3). После отображения диалогового окна с ошибкой просто очистите текстовые поля - все в порядке. Когда пользователь его закроет - он увидит их пустыми.

person Alex Stybaev    schedule 11.05.2012
comment
Что ж, наш урок был о JFrame, поэтому они не хотят использовать других пользователей, кроме JFrame! + если я очистил текстовое поле, оно вернется в нормальное состояние? - person Aya Senpai; 12.05.2012
comment
+ Спасибо! вот не заметил ошибки - person Aya Senpai; 12.05.2012

  1. Если вы выберете модальное диалоговое окно для отображения сообщения об ошибке, нет необходимости изменять редактируемое состояние ваших полей.
  2. Лично меня, как пользователя, очень раздражало бы, если бы каждый раз, когда я делал опечатку, отображалось диалоговое окно. Например, изменение цвета фона текстового поля на красный при неверном вводе и отключение кнопки OK (или любого другого механизма, который у вас есть как у пользователя, чтобы указать, что вы закончили редактирование) более удобен для пользователя IMO. Вы даже можете показать метку, указывающую на ошибки на вашей панели, или всплывающую подсказку, ....
  3. Я бы также рекомендовал DocumentListener вместо KeyListener, если вы хотите реагировать на обновления текста в текстовом поле.

Пример того, почему я предлагаю выбрать другой механизм для информирования пользователя об ошибке: я вставляю недопустимое значение в текстовое поле (например, 3x456), и появляется диалоговое окно. Теперь я хочу использовать клавиши со стрелками, чтобы перейти к ошибке и исправить ее. Это означает, что мне нужно перейти на 3 позиции влево, чтобы удалить x. Если я использую клавиши со стрелками (которые также являются клавишами), я увижу это диалоговое окно еще 3 раза во время навигации.

person Robin    schedule 11.05.2012
comment
Ну, я все еще начинаю, я еще не узнал о DocumentListener. Я действительно благодарю вас за отличную информацию, но все, что я взял, это JFrame, ActionListner и Keylistner. И меня попросили сделать это только JFrame и setEditable - person Aya Senpai; 12.05.2012