在我的应用程序中,我想input数字(量)到一个特定的限制,因此使用了JFormattedTextField。 限制为“12345678.99”,即“。”之前的8位数字。 和“2”之后。 依此类推。 这是我的实现代码,但并不像预期的那样。 startBalTxt.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("########.##")))); startBalTxt.setText(resourceMap.getString("startBalTxt.text")); // NOI18N startBalTxt.setFont(Utility.getTextFont()); startBalTxt.setName("startBalTxt"); // NOI18N INPUT RESULT "12345678905.99" => "12345678906" ==> Should give "12345678.99" or "12345679.99" "12345678.555" => "12345678.56" ==> CORRECT "1234567890123456" => "1234567890123456" ==> Absolutely wrong in all aspects 我哪里错了? 以及如何使这个工作,因为我期待它。 StanislavLbuild议的更新: numberFormat = (DecimalFormat) DecimalFormat.getNumberInstance(); numberFormat.setMaximumFractionDigits(2); numberFormat.setMaximumIntegerDigits(8); numberFormat.setMinimumFractionDigits(0); numberFormat.setMinimumIntegerDigits(2); nfr = new […]
我想使用JFormattedTextField来允许用户input时间值到表单中。 示例有效值是: 2h 30m 72h 15m 6h 0h 但是,我在这方面取得了有限的成功。 有人可以build议如何做到这一点? 如果使用JTextField也可以实现这个结果,我很好。 谢谢! 如果这是值得的,这是我目前的尝试: mFormattedText.setFormatterFactory( new DefaultFormatterFactory( new DateFormatter( new SimpleDateFormat("H mm")))); 这种工作除了: 我不能让h和m显示为纯文本(我尝试转义) * 小时数有一个最大值 *:看@南达的答案
我正在做这个任务,制作一个解决数独的程序。 我有一个SudokuTextBox的网格面板扩展JFormattedTextField。 我有一个MaskFormatter,所以它只接受一个整数每个文本框。 然后在我的面板中,我有这个代码,当一个关键是相关的。 public void keyReleased(KeyEvent e) { SudokuTextBox tb = (SudokuTextBox) e.getSource(); int row = tb.getRow(); int col = tb.getCol(); int value = toInteger(tb.getText()); //System.out.println(value); if(sudoku.isValid(row, col, value)) { sudoku.set(row, col, value); } else { sudoku.set(row, col, 0); tb.setText(null); } tb.setCaretPosition(0); sudoku.print(); } 事情是,如果我把一个有效的值在一个文本框中,然后我回去并输入一个无效的值(由数独规则)文本框被清除。 但是,当我向前看,前面的有效值显示在文本框中。 包含所有已输入数字的我的sudokumatrix会清除值,因此它只在相应的文本框中显示。 当我将“SudokuTextBox扩展JFormattedTextField”改为“SudokuTextBox扩展JTextField”时,使事情变得更加混乱,就像一个魅力。 但我不能设置JTextField的大小,以便它是正方形,我不能强制每个文本框只有一个整数。 我错过了一些非常明显的东西吗