我有这样的数字格式:
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就像转换为空值。
编辑:
正如Prasad Karunagoda所建议的那样,我尝试使用NumberFormmater,但我无法处理一种情况:
我在FocusGained方法中有if语句来检查someValue
il> = 0,如果是,则设置文本。在用户可以对其进行编辑之前,我已经将值预设为-1,因此第一次可以正常使用。现在说用户修改了文本并设置了一个有效的数字(格式化程序将Prasad Karunagoda建议的Minimum属性再次设置为0),说5,就很好了。
现在,我有一个将someValue
重置为-1的按钮,因此,当用户输入要修改的文本时,文本的值为5(用户输入的最后一个有效数字)。我想要的是在按下按钮后将someValue
重置为-1而不显示旧值,将文本设置为空,这可能吗?
答案 0 :(得分:0)
您可以通过使用JFormattedTextField
并将其最小值设置为0来使NumberFormatter
拒绝负数。请尝试以下示例。
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);
}
}