标签: jformattedtextfield

如何使JFormattedTextField接受不带小数点的整数(逗号)?

我曾经JFormattedTextFieldNumberFormat这种方式:

-Creat一个JFormattedTextFieldrefernce

JFormattedTextField integerField;
Run Code Online (Sandbox Code Playgroud)

-创建NumberFormatrefernce

NumberFormat integerFieldFormatter;
Run Code Online (Sandbox Code Playgroud)

- 在构造函数中:

integerFieldFormatter = NumberFormat.getIntegerInstance();
integerFieldFormatter.setMaximumFractionDigits(0);

integerField = new JFormattedTextField(integerFieldFormatter );
integerField.setColumns(5);
Run Code Online (Sandbox Code Playgroud)

..........

我打算只使用整数,但是当我键入1500之类的数字时,它会在失去焦点后转换为1,500,抛出异常这是它的第一行:

线程"AWT-EventQueue-0"中的异常java.lang.NumberFormatException:对于输入字符串:"1,500"

当我使用JTextField而不是JFormattedTextField正常接受的所有整数时,但我想要使用的原因JFormattedTextField是受益于其输入限制优势.

java swing integer number-formatting jformattedtextfield

3
推荐指数
2
解决办法
1万
查看次数

JFormattedTextField未正确清除

我正在做这个任务,制作一个解决数独的程序.我有一个带有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();
 }
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在文本框中放一个有效的值,然后我回去(由数独的规则),输入无效值的文本框被清除.但是当我向前选项卡时,前一个有效值显示在文本框中.我sudokumatrix包含所有已inputed不明确的价值像它应该这样,只有在相应的文本框中的数字.

当我将"SudokuTextBox扩展JFormattedTextField"更改为"SudokuTextBox extends JTextField"时,它更加令人困惑,它就像一个魅力.但我不能设置JTextField的大小,以便它是正方形,我不能强制每个文本框只有一个整数.

我错过了一些非常明显的东西吗

java keyevent sudoku jtextfield jformattedtextfield

2
推荐指数
1
解决办法
3636
查看次数

JTextField时间,单位为HH:mm:ss

我有一个特定任务所需的估计时间,以分钟为单位.我怎么能把它放在一个JFormattedTextField的格式HH:mm:ss

java formatting time swing jformattedtextfield

2
推荐指数
1
解决办法
1万
查看次数

JFormattedTextField格式化百分比数字?

我想使用JFormattedTextField将浮点数格式化为百分比值,允许输入从0到100%(转换为0.0f-1.0f),始终显示百分号并禁止任何无效字符.

现在我用NumberFormat.getPercentInstance()和NumberFormatter属性进行了一些实验,但没有成功.

有没有办法创建一个遵循标准类遵守这些规则的JFormattedTextField?或者我必须实现自己的NumberFormatter?

这就是我到目前为止(无法输入100%,输入0完全打破它):

public class MaskFormatterTest {
    public static void main(String[] args) throws Exception {
        JFrame frame = new JFrame("Test");
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        NumberFormat format = NumberFormat.getPercentInstance();
        NumberFormatter formatter = new NumberFormatter(format);
        formatter.setMaximum(1.0f);
        formatter.setMinimum(0.0f);
        formatter.setAllowsInvalid(false);
        formatter.setOverwriteMode(true);
        JFormattedTextField tf = new JFormattedTextField(formatter);
        tf.setColumns(20);
        tf.setValue(0.56f);

        frame.add(tf);
        frame.pack();
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing number-formatting jformattedtextfield

2
推荐指数
1
解决办法
3282
查看次数

如何使用JFormattedTextField只允许字母和数字

我有这个代码,无法得到MaskFormatter正确的
maskformatter

MaskFormatter formatter = null;
  try {
    formatter = new MaskFormatter("HHHHHHH");
  } catch (ParseException e) {
    e.printStackTrace();
  }

txtTroll = new JFormattedTextField(formatter);
Run Code Online (Sandbox Code Playgroud)

我需要任何十六进制字符(0-9,az或AZ)和"H"应该
只给我(0-9,az或AZ),但我错了.

当我输入文字时,只输入大写字母并且它很慢
,当我点击txtTroll所有字母时,它会消失

java validation swing jformattedtextfield

2
推荐指数
1
解决办法
6069
查看次数

Java:JFormattedTextField保存数字

在我的应用程序中,我想将数字(金额)输入到特定限制,因此使用了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
Run Code Online (Sandbox Code Playgroud)
  INPUT                RESULT  
"12345678905.99"   => "12345678906"      ==> Should give "12345678.99" or "12345679.99"
"12345678.555"     => "12345678.56"      ==> CORRECT
"1234567890123456" => "1234567890123456" ==> Absolutely wrong in all aspects
Run Code Online (Sandbox Code Playgroud)

我哪里错了?以及如何使这个工作,因为我期待它.

StanislavL建议的更新:

    numberFormat = (DecimalFormat) DecimalFormat.getNumberInstance();
    numberFormat.setMaximumFractionDigits(2);
    numberFormat.setMaximumIntegerDigits(8);
    numberFormat.setMinimumFractionDigits(0);
    numberFormat.setMinimumIntegerDigits(2);

    nfr = new NumberFormatter(numberFormat);

    initComponents();
    myParent = parent;
    this.startBalTxt.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(nfr));

    Results ->  4562147896.45  == > 62,147,896.45
Run Code Online (Sandbox Code Playgroud)

它遵守了真正的限制,但它消除了以前的数字而不是以后的数字.我的意思是在4562147896.45而不是"45""96"不应该被淘汰.

java swing number-formatting jformattedtextfield

2
推荐指数
1
解决办法
6605
查看次数

特定区域设置的JFormattedTextField货币格式

我使用了以下链接中的信息来显示特定区域设置的货币格式:

如何在运行时更改JFormattedTextField的格式?

但是在更改区域设置时格式不会改变.

这是代码.

package testapp;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Locale;
import javax.swing.DefaultComboBoxModel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;

/**
 *
 * @author Sanjeev
 */
public class JFormattedTextFieldAndCurrency extends javax.swing.JFrame {

    private class LocaleInfo implements Comparable<LocaleInfo> {

        private Locale locale;

        public Locale getLocale() {
            return locale;
        }

        public void setLocale(Locale locale) {
            this.locale = locale; …
Run Code Online (Sandbox Code Playgroud)

java swing locale jformattedtextfield

2
推荐指数
1
解决办法
2493
查看次数

使JFormattedTextField接受超过3位数的小数

我有一个JFormattedTextField应该能够接受超过3位十进制数字的双数字.它接受条目0.1,0.01,0.001但拒绝0.0001和数字与十进制数字.

这就是我的代码现在的工作方式:

DecimalFormat decimalFormat = new DecimalFormat("0.0E0");
JFormattedTextField txtfield = new JFormattedTextField(decimalFormat.getNumberInstance(Locale.getDefault()));
Run Code Online (Sandbox Code Playgroud)

如何让我的文本字段接受超过3位十进制数字的数字?

java swing jformattedtextfield

2
推荐指数
1
解决办法
4618
查看次数

为什么 JFormattedTextField 恢复以前的值?

我正在使用 JFormattedTextField,当我尝试删除字段中的值时,它会自动恢复以前的值。这种行为的原因是什么?我怎样才能阻止它恢复价值?

这是 JFormattedtextField 的代码。

jFormattedTextField2 = new javax.swing.JFormattedTextField(new DecimalFormat("###,###.##"));
Run Code Online (Sandbox Code Playgroud)

java swing jtextfield jformattedtextfield

2
推荐指数
1
解决办法
1806
查看次数

如何在应用 MaskFormatter 后使 JTable 单元格中的插入符显示在左侧

将 MaskFormatter 应用到 JFormattedTextField 上,然后将该文本字段设置为 JTable 中的一列后,无论我单击什么位置,插入符号都开始出现。但是,我希望插入符号出现在单元格的最左侧位置,无论用户单击单元格中的哪个位置。我尝试了 setCaretPositionMethod,但它什么也没做。我的猜测是,有某种表侦听器,它强制插入符移动到用户单击的位置,如果我知道这个侦听器是什么,我可以覆盖该功能。

SSCCE:

public class TableExample extends JFrame {
    public TableExample() {
        add(makeTable());
    }

    private JTable makeTable() {
        Object[][] tableData = {{"","a","b",""}, {"","c","d",""}};
        String[] columns = {"column1", "column2", "column3", "dobColumn"};
        JTable table = new JTable(tableData, columns);

        ////DOB column formats to dd/mm/yy
        TableColumn dobColumn = table.getColumnModel().getColumn(3);
        DateFormat df = new SimpleDateFormat("dd/mm/yy");
        JFormattedTextField tf = new JFormattedTextField(df);
        tf.setColumns(8);
        try {
            MaskFormatter dobMask = new MaskFormatter("##/##/##");
            dobMask.setPlaceholderCharacter('0');
            dobMask.install(tf);
        } catch (ParseException ex) {
             Logger.getLogger(TableExample.class.getName()).log(Level.SEVERE, null, ex);
        } …
Run Code Online (Sandbox Code Playgroud)

java swing jtable caret jformattedtextfield

2
推荐指数
1
解决办法
392
查看次数