- 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/
我正在制作一个 ATM 程序来学习 java,使用 cmd 来编译和运行它。该程序编译没有错误,但在运行时仅打印 at ATM.(init)(ATM.java:6)。 如有任何帮助,我们将不胜感激!
减少很多,是不对称的。我试图证明它,但它不起作用这么好。 给定两种语言 A 和 B,其中 A 定义为 A={w| |w| is even} , i.e. `w` has an even length
这是我的源代码: import java.text.SimpleDateFormat; import java.util.*; import java.io.*; public class ATM {
我在世界范围内如何ATM-systems被架构。银行在全局范围内设计一个一致的系统一定非常困难。他们是为此使用最终一致性还是使用出色的 ACID 系统? 我可以有一天在我的银行所在的瑞典使用 ATM,
我正在努力获得 old piece of code从 2003 年开始工作。我正在尝试复制 ATM 样式的十进制文本框。这段代码声称对某人有用,但我在实现它时遇到了困难。 也许有人有更好的方法来实现这
我正在做一个自动取款机程序,我很难弄清楚如何让它实际存款和取款。余额一开始自动为 0 美元,但我无法输入任何内容来实际添加或减去它,我做错了什么? public class ATM { static
我的任务是创建一个 ATM 类型的程序。下面是我的主要功能(不包括存款、取款和查询余额功能)。当我运行此代码时,程序会重复循环 pin 函数,即使我输入 0 或 1234 也是如此。它会重复指示用户输
我们想编写一个基于 Web 的应用程序来监控银行中的 ATM 机,以具有以下功能: 各终端显示位置 显示一般状态 颜色编码或简单的终端 图标(ATM 向上/向下/需要注意, 低现金等) 有一个设施可以
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我创建了一个关于 ATM 机的应用程序,其数组帐户大小为 10,但由于某些奇怪的原因,输入仅接受 0(第一个 id),但不接受其他 id 的其他 9 个 id,它总是显示无效 ID 错误消息。我花了几
我对 Python 和编码还很陌生。我正在尝试创建一个 ATM 类型的程序,让您可以存款和取款。我输入了我收到的错误消息。老实说,我只是不知道从这里该去哪里。 此外,如何通过 % 调用确保提款金额可以
Pooja would like to withdraw X $US from an ATM. The cash machine will only accept the transaction if
我试图创建一个程序来显示推算金额以及 ATM 可以分发的 10 美元和 1 美元纸币的数量,但它不会显示正确数量的 1 美元纸币。 int amount = int.Parse(txtAmount.T
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关于您编写的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以重现它。参见 SSC
我在 iPhone 应用程序中有一个文本字段,我想实现类似于 atms 输入的输入,您所要做的就是输入数字(不需要输入小数点字符)。我希望能够只为这个文本字段使用数字键盘。例如,文本字段最初显示: 0
import java.util.Scanner; import userAccountInformation.csv; public class AtmMachine { private doub
我制作了一个提款机(ATM)程序,但我不知道出了什么问题。一切正常,除了交易是一行零。我一定是搞砸了。我认为这与“showTransactions”方法有关。感谢您的帮助! import java.u
嘿伙计们,我正在构建一个 ATM 程序,并且一切正常 我有它弹出的菜单,您可以选择一个选项,它会运行该功能,但是,我一生都不能 设定平衡并让它留下来直到它改变一旦两个选项(存款、取款)之一发生变化,我
现在我正在开发一个 ATM 项目。用户将输入姓名、余额、交易类型和交易金额。交易类型为提款(W)、存款(D)和R(报告),我使用的是switch,有 3 个案例 W、D、R。如果您出现以下情况,程序将
我是一名优秀的程序员,十分优秀!