Вы хотите пахать немного в замечательной работе Paul Stovell относительно подтверждения правильности данных. Он подвел итог своих идей когда-то в эта статья . Я, оказывается, совместно использую его точку зрения по вопросу, который я реализовал в мои собственные библиотеки .
Вот, в словах Paul, недостатках к выдаванию исключения в методах set (на основе образца, где Name
свойство не должно быть пустым):
- могут быть времена, где у Вас на самом деле должно быть пустое название. Например, как значение по умолчанию для "Создают учетную запись" форма.
- при доверии этому для проверки каких-либо данных перед сохранением, Вы пропустите случаи, где данные уже недопустимы. Этим я имею в виду, если Вы загружаете учетную запись из базы данных с пустым названием и не изменяете ее, Вы никогда не могли бы знать, что это было недопустимо.
- , Если Вы не используете привязку данных, необходимо записать много кода с
try/catch
блоки, чтобы показать эти ошибки пользователю. При попытке показать ошибки на форме, поскольку пользователь заполняет его, становится очень трудным.- мне не нравится выдавать исключения для неисключительных вещей. Пользователь, определяющий имя учетной записи к , "Supercalafragilisticexpialadocious" не является исключением, это - ошибка. Это - конечно, персональная вещь.
- Это делает очень трудным получить список всех правил, которые были нарушены. Например, на некоторых веб-сайтах, Вы будете видеть сообщения проверки такой, поскольку "Имя должно быть введено. Адрес должен быть введен. Электронная почта должна быть введена" . Для отображения этого Вы собираетесь нуждаться в большом количестве из
try/catch
блоки.
И вот основные правила для альтернативного решения:
- нет ничего неправильно с наличием недопустимого бизнес-объекта, пока Вы не пытаетесь сохранить его.
- Любой и все нарушенные правила должны быть восстановимы от бизнес-объекта, так, чтобы привязка данных, а также Ваш собственный код, видела, существуют ли ошибки и обрабатывают их соответственно.
Ознакомьтесь с разделом Как использовать привязки клавиш в руководстве по Java.
Вам необходимо создать и зарегистрировать Action
с помощью компонента ActionMap
и регистр пары ( KeyStroke
, Action Name ) в одном из компонентов вашего приложения InputMap
s. Учитывая, что у вас нет JMenuBar
, вы можете просто зарегистрировать привязки клавиш с помощью JPanel
верхнего уровня в своем приложении.
Например:
Action action = new AbstractAction("Do It") { ... };
// This is the component we will register the keyboard shortcut with.
JPanel pnl = new JPanel();
// Create KeyStroke that will be used to invoke the action.
KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK);
// Register Action in component's ActionMap.
pnl.getActionMap().put("Do It", action);
// Now register KeyStroke used to fire the action. I am registering this with the
// InputMap used when the component's parent window has focus.
pnl.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "Do It");