Не указывать текст в JTextFormattedField с помощью NumberFormat - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть такой числовой формат:

NumberFormat format = NumberFormat.getInstance();

И поле форматированного текста:

JFormattedTextField score = new JFormattedTextField(format)

В моем коде я имею:

score.addFocusListener(new FocusListener() {                

@Override
public void focusLost(FocusEvent e) {
    }

@Override
public void focusGained(FocusEvent e) {
    if (someValue >= 0)
        score.setText(Integer.toString(someValue));
    else
        score.setText("");
    }
});

Я пытался преобразовать ввод для текстового поля оценки, только если значение> = 0, если не просто оставить его пустым.Этот код не работает должным образом, на самом деле, если я пытаюсь сохранить положительное значение, скажем, 4, то я пытаюсь изменить его на отрицательное значение, оно не работает должным образом.

Есть ли способсделать это?Я хотел бы отобразить все значения> = 0, но «скрыть» отрицательные значения, так что, скажем, -5, похоже на преобразование в нулевое значение.

РЕДАКТИРОВАТЬ:
Как предложил Прасад Карунагода япытался использовать NumberFormmater, но я не могу справиться с одной ситуацией:

У меня в методе FocusGained есть оператор if, чтобы проверить, если someValue il> = 0, и, если это так, установить текст.У меня есть предустановленное значение, равное -1, до того, как пользователь сможет его редактировать, поэтому в первый раз оно работает хорошо.Теперь, скажем, пользователь изменяет текст и устанавливает допустимое число (свойство форматера снова имеет свойство Minimum, равное 0, как предлагает Прасад Карунагода), скажем, 5, и это все хорошо.

Теперь у меня есть кнопка, котораясбрасывает это someValue в -1, поэтому, когда пользователь вводит текст для изменения, значение текста равно 5 (последнее действительное число, введенное пользователем).Однако я хотел установить пустой текст после нажатия кнопки, чтобы сбросить someValue на -1 и не отображать старое значение, возможно ли это?

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете заставить JFormattedTextField отклонять отрицательные числа, используя NumberFormatter и устанавливая его минимум на 0. Попробуйте приведенный ниже пример.

import javax.swing.*;
import javax.swing.text.NumberFormatter;
import java.awt.GridLayout;

public class FieldRangeTest {

  public static void main(String[] args) {

    NumberFormatter formatter = new NumberFormatter();
    formatter.setMinimum(0);
    JFormattedTextField formattedTextField = new JFormattedTextField(formatter);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new GridLayout(2, 2));
    frame.getContentPane().add(new JLabel("Formatted text field"));
    frame.getContentPane().add(formattedTextField);
    frame.getContentPane().add(new JLabel("Text field"));
    frame.getContentPane().add(new JTextField(20));
    frame.setBounds(300, 200, 400, 300);
    frame.setVisible(true);
  }
}
...