gpt4 book ai didi

java - JFormattedTextField 删除用户输入

转载 作者:行者123 更新时间:2023-11-29 03:40:04 24 4
gpt4 key购买 nike

我有以下代码:

public test() {
setLayout(new FlowLayout());
JFormattedTextField price = new JFormattedTextField(new DecimalFormat("#,##0.00 \u00A4"));
price.setValue(new Float(105.00));
add(price);
add(new JButton("Ok"));

pack();
setVisible(true);

}

如果我现在输入一个数字,例如“20”。文本字段再次输入“105.00”。为什么它不接受我的输入并总是返回到默认值?

最佳答案

有三种方法,从最简单的开始,到无用的结束,与第 1 点和第 2 点相比,可能是废话。

  • 货币符号使用NumberFormat.getCurrencyInstance();NumberFormat.getCurrencyInstance(Locale);,则此值对具体有效JTextField/JFormattedTextField/JSpinner/XxxCellRenderer/XxxCellEditor,

代码

import java.awt.GridLayout;
import java.math.RoundingMode;
import java.text.NumberFormat;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.NumberFormatter;

public class MaskFormatterTest {

public static void main(String[] args) throws Exception {
//NumberFormat format = NumberFormat.getNumberInstance();
NumberFormat format = NumberFormat.getCurrencyInstance();
format.setMaximumFractionDigits(2);
format.setMinimumFractionDigits(2);
format.setParseIntegerOnly(true);
format.setRoundingMode(RoundingMode.HALF_UP);

NumberFormatter formatter = new NumberFormatter(format);
formatter.setMaximum(1000.0);
formatter.setMinimum(0.0);
formatter.setAllowsInvalid(false);
formatter.setOverwriteMode(false);

JFormattedTextField tf = new JFormattedTextField(formatter);
tf.setColumns(10);
tf.setValue(123456789.99);
JFormattedTextField tf1 = new JFormattedTextField(formatter);
tf1.setValue(1234567890.99);
JFormattedTextField tf2 = new JFormattedTextField(formatter);
tf2.setValue(1111.1111);
JFormattedTextField tf3 = new JFormattedTextField(formatter);
tf3.setValue(-1111.1111);
JFormattedTextField tf4 = new JFormattedTextField(formatter);
tf4.setValue(-56);

JFrame frame = new JFrame("Test");
frame.setLayout(new GridLayout(5, 0));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(tf);
frame.add(tf1);
frame.add(tf2);
frame.add(tf3);
frame.add(tf4);
frame.pack();
frame.setVisible(true);
}
}

.

  • 应用自己的NavigationFilter,固定位置可以在JTextField/JFormattedTextField/ 中的possition (Bias) 的开始或结束JSpinner/XxxCellRenderer/XxxCellEditor,

代码

//@see & read http://stackoverflow.com/questions/7421337/limited-selection-in-a-jtextfield-jtextcomponent
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class NavigationFilterPrefixWithBackspace extends NavigationFilter {

private int prefixLength;
private Action deletePrevious;

public NavigationFilterPrefixWithBackspace(int prefixLength, JTextComponent component) {
this.prefixLength = prefixLength;
deletePrevious = component.getActionMap().get("delete-previous");
component.getActionMap().put("delete-previous", new BackspaceAction());
component.setCaretPosition(prefixLength);
}

@Override
public void setDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) {
fb.setDot(Math.max(dot, prefixLength), bias);
}

@Override
public void moveDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) {
fb.moveDot(Math.max(dot, prefixLength), bias);
}

class BackspaceAction extends AbstractAction {

private static final long serialVersionUID = 1L;

public void actionPerformed(ActionEvent e) {
JTextComponent component = (JTextComponent) e.getSource();
if (component.getCaretPosition() > prefixLength) {
deletePrevious.actionPerformed(null);
}
}
}

public static void main(String args[]) throws Exception {
JTextField textField = new JTextField("Prefix_", 20);
textField.setNavigationFilter(new NavigationFilterPrefixWithBackspace(7, textField));
JFrame frame = new JFrame("Navigation Filter Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(textField);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

.

  • 使用 InputVerifier 创建自己的 InputMask,解决方法对于(每个)JTextField/JFormattedTextField< 可以/不能不同/JSpinner/XxxCellRenderer/XxxCellEditor,

关于java - JFormattedTextField 删除用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com