InputVerifier и несколько полей - PullRequest
1 голос
/ 23 августа 2010

Я работаю над формой, которая обеспечивает проверку в реальном времени для пользователя, и у меня есть одна проблема.

Цель состоит в том, чтобы поместить метку рядом с полем (в данном случае JSpinner),чтобы показать пользователю, если данные приняты или отклонены, так же, как это делают валидаторы на основе javascript.

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

class MyVerifier extends InputVerifier{

    static final double MAX_VALUE = 30;

    @Override
    public boolean verify(JComponent input) {
        JTextField tf = (JTextField) input;
        Double value = Double.parseDouble(tf.getText().replace(',', '.'));
        return (value>1);
    }

    @Override
    public boolean shouldYieldFocus(JComponent input) {
        boolean isValid = super.shouldYieldFocus(input);
    if (isValid) {
            jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("resources/accept.png")));
            jLabel1.setText("");
    } else {
            jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("resources/exclamation.png")));
            jLabel1.setText("The number of items must be greater than 1");
    }
        return true;
    }
 }

Затем тот же код для jLabel2 ... Это должен быть другой способсделайте это.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Вы также можете использовать JDialog в качестве всплывающего окна рядом с JComponent, который вы проверяете.У этого всплывающего JDialog будет JLabel, который будет инкапсулировать сообщение, которое вы хотите отобразить рядом с соответствующим Jcomponent.Все, что вам нужно сделать, это рассчитать положение всплывающего окна относительно J-компонента, который вы проверяете.

Хороший пример вы можете найти здесь

1 голос
/ 23 августа 2010

У вас может быть Hashmap для текстового поля и связанного с ним компонента метки.Затем в методе shouldYieldFocus вы получаете соответствующую метку для проверяемого текстового поля.Затем вы можете соответствующим образом установить текст / значок метки.

Вам, вероятно, также понадобится второстепенный Hashmap, содержащий метку и текстовое сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...