- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有办法让 JformattedTextField 或 jtextField 表现得像 atm 钱输入。我的意思是你从右到左输入,假设你输入 10,你需要再按 2 个 0,这样它就是 10.00 。当他从右向左打字时,程序会自动输入小数点?如果未输入 2 个 0,它将只是 .10 。这可能吗?如果我想使用该字符串进行计算,那将如何返回给我?我尝试了抽象格式化程序,但效果不是很好。我想用它来输入客户收到的金额。但是让它成为白痴证明。
最佳答案
这会强制用户始终从右侧输入文本,无论插入符号位于何处。插入新字符时,所有先前的字符都向左移动。将根据您的格式化程序应用格式:
import java.awt.*;
import java.text.*;
import javax.swing.*;
import javax.swing.text.*;
public class ABMTextField extends JTextField
{
private DecimalFormat format;
private String decimal;
public ABMTextField(DecimalFormat format)
{
this.format = format;
decimal = Character.toString( format.getDecimalFormatSymbols().getDecimalSeparator() );
setColumns( format.toPattern().length() );
setHorizontalAlignment(JFormattedTextField.TRAILING);
setText( format.format(0.0) );
AbstractDocument doc = (AbstractDocument)getDocument();
doc.setDocumentFilter( new ABMFilter() );
}
@Override
public void setText(String text)
{
Number number = format.parse(text, new ParsePosition(0));
if (number != null)
super.setText( text );
}
public class ABMFilter extends DocumentFilter
{
public void insertString(FilterBypass fb, int offs, String str, AttributeSet a)
throws BadLocationException
{
replace(fb, offs, 0, str, a);
}
public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
throws BadLocationException
{
if (".0123456789".contains(str))
{
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder( doc.getText(0, doc.getLength()) );
int decimalOffset = sb.indexOf( decimal );
if (decimalOffset != -1)
{
sb.deleteCharAt(decimalOffset);
sb.insert(decimalOffset + 1, decimal);
}
sb.append(str);
try
{
String text = format.format( format.parse( sb.toString() ) );
super.replace(fb, 0, doc.getLength(), text, a);
}
catch(ParseException e) {}
}
else
Toolkit.getDefaultToolkit().beep();
}
public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
throws BadLocationException
{
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder( doc.getText(0, doc.getLength()) );
int decimalOffset = sb.indexOf( decimal );
if (decimalOffset != -1)
{
sb.deleteCharAt(decimalOffset);
sb.insert(decimalOffset - 1, decimal);
}
sb.deleteCharAt( sb.length() - 1) ;
try
{
String text = format.format( format.parse( sb.toString() ) );
super.replace(fb, 0, doc.getLength(), text, null);
}
catch(ParseException e) {}
}
}
private static void createAndShowUI()
{
DecimalFormat format = new DecimalFormat("###,##0.00");
ABMTextField abm = new ABMTextField( format );
JPanel panel = new JPanel();
panel.add( abm );
JFrame frame = new JFrame("ABMTextField");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( panel );
frame.setSize(200, 200);
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
How would that be returned to me if I want to use that string to do calculations on then?
您需要创建一个方法,可能是 getValue(),它会使用 format.parse(...) 方法返回一个实际数字。
关于java - 使 JFormattedTextField 的行为类似于 ATM 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074758/
我有一个带有 DateFormat 的 JFormattedTextField。格式为“ddMMyy”。这种格式允许快速输入。当焦点丢失时,我希望字段中的文本更改为 LocalDate,因为这样更易于
嘿伙计们,我想知道是否可以将 JFormattedTextField 设置为具有电子邮件输入的自动格式。例如,当用户输入电子邮件地址时,我希望它接受如下内容:jsmith1@smith.com 但我希
我在代码中使用时间时遇到了一些麻烦: txtDauer = new JFormattedTextField(); txtDauer.setFormatterFactory(new DefaultFor
我想使用 JFormattedTextField 将 float 格式化为百分比值,允许输入从 0 到 100%(转换为 0.0f-1.0f),始终显示百分号并不允许任何无效字符。 现在我对 Numb
我有此代码,但无法正确获取MaskFormatter maskformatter MaskFormatter formatter = null; try { formatter = new
我正在扩展 JFormattedTextField 以添加监听器。我已经完成了这项工作,尽管这可能不是最好的方法。没有办法使用单个泛型构造函数吗? public class TimeLineTextC
我想获取 JFormattedTextField 的值并将其转换为字符串这是我的 JFormattedTextField 代码 这是我的代码: public void formattedTextFie
我有一个字符数组列表,还有一个返回字符串的 JTextField。我想知道如何只允许输入字符?或者也许我如何只允许传递字符串的第一个字母? 最佳答案 所以您只想允许输入某些字符,即由ArrayList
我正在做这个作业,制作一个解决数独的程序。我有一个带有 SudokuTextBox 网格扩展 JFormattedTextField 的面板。我有一个 MaskFormatter,因此每个文本框只接受
我正在尝试在 Beanshell 中创建一个简单的对话框 - 它应该读取三个可编辑文本字段的内容,并在按下按钮时相应地执行一个简单的任务。我完全被一个错误所困扰,我无法阅读某些字段中的文本。 代码如下
我有一个用于“名称”字段的 jFormattedTextFiled。我必须限制字段只能输入 25 个字符。如果输入更多,则必须显示一些消息...对于消息我可以使用 JOptionpane.. 我该怎么
我有一个正在使用代码初始化的 JFormattedTextField JFormattedTextField f = new JFormattedTextField(createFormatter()
假设JFormattedTextField已启用并包含格式化程序,有没有办法使其只读?使用JTextField,我们只需要提供一个自定义文档并在那里进行所有控制,但是使用JFormattedTextF
我需要一个限制为小数点后 3 位的 JTextField。经过搜索,我发现了 JFormattedTextField,它看起来很棒。现在的代码是: try { double aux = 25.
我的 GUI 程序中有以下 JFormattedTextField。 DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); JFormattedTex
如何编写 JFormattedTextField 代码以接受不带小数的货币格式? 我尝试到处寻找答案。具体来说,是 Oracle、Google 和 Code Ranch。 我的问题:如何对格式化文本字
我在这里遇到麻烦了,我正在尝试创建一个创建 JFormattedTextFields 的类,它可以工作,但我需要获取它的值,那就是我得到 NullPointerExeption 的时候,这是我的代码:
我正在使用 GUI 制作一个小型数独游戏,并为 JFormattedTextFields 使用 MaskFormatter: formatter = new MaskFormatter(s); f
我一直在学习更多与 Java GUI 相关的知识。但是,我遇到了一个问题,不确定如何解决。 我有一部分程序(如下所示,但不相关的代码已被删除),除了 JFormattedTextField 变量 (s
由于有人错误地将我的另一个问题( NumberFormat parse not strict enough )标记为重复,并且尽管我指出它是不同的但没有删除重复的标签,所以我将再次发布该问题以及我的解
我是一名优秀的程序员,十分优秀!