我正在创建一个计算器软件。在我正在键入的文本字段中,整个表达式显示为一个字符串(我希望保持这种方式)。这是一个演示:
我希望它的格式如下:
以上是正确格式的上述示例:
我还希望在我输入时自动更新格式。
Sofar我尝试将JFormattedTextField
与MaskFormatters
和NumberFormat
一起使用,但他们都没有像我上面所描述的那样工作。
NumberFormat版本。
public class Frame {
private NumberFormat numberFormat = NumberFormat.getInstance();
private JFormattedTextField textField = new JFormattedTextField(numberFormat);
}
MaskFormatter版本。
public class Frame {
private MaskFormatter maskFormat;
private JFormattedTextField textField;
public Frame() {
try {
maskFormat = new MaskFormatter("###.###.###,######");
} catch (ParseException e) {
e.printStackTrace();
}
textField = new JFormattedTextField(maskFormat);
}
}
我设法使用DecimalFormat
格式化结果,但我不想只对结果进行格式化。
格式化结果。
DecimalFormat resultFormat = new DecimalFormat("###,###,###.######");
String result = resultFormat.format(Parser.evaluate(expression));
textField.setText(result);
当我计算5/3时,结果是:
就像我想要的那样。
很抱歉这么详细而且很长的帖子,非常感谢任何帮助!
答案 0 :(得分:0)
试试这个。
DecimalFormat resultFormat = new DecimalFormat("###,###,###.######");
Pattern numberPattern = Pattern.compile("\\d+(\\.\\d+)?");
String s = "1000×(5-3)/2";
Matcher m = numberPattern.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
double value = Double.parseDouble(m.group());
String formatted = resultFormat.format(value);
m.appendReplacement(sb, formatted);
}
m.appendTail(sb);
System.out.println(sb);
// -> 1,000×(5-3)/2