как исправить нажатие клавиши для изменения Jlabel на допустимые значения - PullRequest
0 голосов
/ 21 апреля 2019

Я работаю со степенями преобразования, как только пользователь вводит значение в текстовое поле, указывающее, какая степень требуется, ввод с выводимым результатом должен появиться вместо метки, которая была раньше.Здесь раздел для ограничения форматирования для ввода букв только для цифр в текстовом поле

        NumberFormat format = NumberFormat.getInstance();
        NumberFormatter formatter = new NumberFormatter(format);
        formatter.setValueClass(Double.class);
        formatter.setMinimum(Double.MIN_VALUE);
        formatter.setMaximum(Double.MAX_VALUE);
        formatter.setAllowsInvalid(false);
        formatter.setCommitsOnValidEdit(true);
        formattedTextField = new JFormattedTextField(formatter);

        formattedTextField.setColumns(10);

      }

здесь проблема

      public void keyPressed(KeyEvent e){
        double degree;
        if (Angle.isSelected()||e.getKeyChar()==KeyEvent.VK_ENTER){
          degree = Math.toDegrees((double)formattedTextField.getValue());
          resultLabel.setText(formattedTextField.getValue() 
   + " ° = "+ degree + " radians");

  }else if(Radians.isSelected()||e.getKeyChar()==KeyEvent.VK_ENTER){
 degree = Math.toRadians((double) formattedTextField.getValue());
          resultLabel.setText(formattedTextField.getValue() + 
 " radians = " + degree + " °");
        }
      }
    }

1 Ответ

1 голос
/ 21 апреля 2019

Проблема в том, что вы используете || (или) вместо && (и).Ваши if тесты не требуют, чтобы нажатая клавиша была ENTER;они требуют, чтобы клавиша была ENTER, или , выбрана одна из радиокнопок (Angle или Radians).

Все, что сказано… это не имеет значения, потому что вы не должны использоватьKeyListener для этого.Обычно вы проверяете пользователя, нажимающего Enter в JTextField, путем добавления ActionListener , но JFormattedTextField имеет лучший способ, который контролирует не только Enter, но и потерю фокуса: документация для свойства значения JFormattedTextField утверждает, что это связанное свойство, что означает, что вы можете прослушивать изменения в этом свойстве:

formattedTextField.addPropertyChangeListener("value",
    new PropertyChangeListener() {
        @Override
        public void propertyChangeEvent(PropertyChangeEvent event) {
            Double newValue = (Double) event.getNewValue();
            if (newValue != null) {
                if (angle.isSelected()) {
                    double radians = Math.toRadians(newValue);
                    resultLabel.setText(
                        newValue = + " ° = " + radians + " radians");
                } else {
                    double degree = Math.toDegrees(newValue);
                    resultLabel.setText(
                        newValue + " radians = " + degree + " °");
                }
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...