相关疑难解决方法(0)

高级格式化文本字段输入操作?

首先,我知道我之前曾问过类似的问题,但这个问题有所不同.我正在尝试制作一个计算器,使得在文本字段中输入的所有数字的算术平均值都是可编辑的.我有大约25个文本字段,但一次只能编辑14-16个.用户有3个jspinner来添加或删除程序中已有的一些可编辑文本字段.我的问题是,如何从这些文本字段中检查哪些文本字段可以编辑并操纵数据?

出于审核目的,这个问题与另一个问题不同.在另一个问题中,我根本不具体,而且情况有所不同,所以请保持开放,我需要帮助.

java swing

4
推荐指数
1
解决办法
3230
查看次数

使JSpinner只读取数字,但也检测退格

我正在尝试创建一个只接受数字的JSpinner,但我也想让它读取/响应退格.

public class test {
    JFrame frame;
    JPanel panel;
    JSpinner spinner;

    public test()
    {
        frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(200,200));

        panel = new JPanel();

        SpinnerNumberModel numSpin = new SpinnerNumberModel(10, 0,1000,1);
        spinner = new JSpinner(numSpin);
        JFormattedTextField txt = ((JSpinner.NumberEditor) spinner.getEditor()).getTextField();
        ((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false);
        panel.add(spinner);

        frame.setContentPane(panel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

    }
    public static void main(String[] args)

    {
        test test = new test();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码只能编号,但这不允许我退格.我在这个网站上找到了一些例子,但是他们是为C写的.

java swing jspinner jformattedtextfield

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

如何更改JTextField的值?

我正在尝试使用JFrameSwing 构建一个Java应用程序,我有5个JTextField实例.其中一个是Sum.

我需要JTextField在文本字段中输入一些数字后立即自动更改.

怎么可能?

我写的是这里.

private void displaytotalActionPerformed(java.awt.event.ActionEvent evt) {
// display total:
Float num1,num2,num3,num4,num5,num6,result;
num1 = display1b.getText().equals("") ? 0 : Float.parseFloat(display1b.getText());
num2 = display2b.getText().equals("") ? 0 : Float.parseFloat(display2b.getText());
num3 = display3b.getText().equals("") ? 0 : Float.parseFloat(display3b.getText());
num4 = display4b.getText().equals("") ? 0 : Float.parseFloat(display4b.getText());
num5 = display5b.getText().equals("") ? 0 : Float.parseFloat(display5b.getText());
num6 = display6b.getText().equals("") ? 0 : Float.parseFloat(display6b.getText());

result = num1+num2+num3+num4+num5+num6;

System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)

我试图获得总和并使用按钮在此文本字段中显示它并且它工作.但我希望它能自动完成.但上面的代码在textfield上没有显示任何内容.

我对此很陌生,如果你能引导,我感激不尽.

java swing jtextfield documentlistener

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

检测JTextField"取消选择"事件

是否有某种方法可以检测是否取消选择了JTextField,即选择了WAS字段,但现在您已经选择了其他内容.我想这样做的原因是因为我想在用户表单中检查任何非法字符,然后才会尝试提交数据.如果有一些更容易的方法,而不是我试图解决它的方式,我会很乐意接受启蒙.

java validation swing jtextfield focuslistener

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

JSpinner采用双格式

我想创建支持非整数值的JSpinner,例如2.01和-3.456,因此getValue()返回一个Double.

不仅如此,我希望步长应该是动态的,使用类似下面的公式(10%的大小):

stepSize = 0.1 * pow(10, round( log(currentValue) ));
Run Code Online (Sandbox Code Playgroud)

可能吗?或者我应该问,麻烦值得吗?

更新:

通过改编Vishal的答案,我制作了以下课程来制作漂亮的双旋转器.到目前为止,他们已经证明在我的程序中工作得很好,尽管我会将自适应步长抽象到另一个父类中,以便我可以在以后制作AdaptiveDoubleSpinners和AdaptiveIntegerSpinners.

import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class DoubleSpinner extends JSpinner {

    private static final long serialVersionUID = 1L;
    private static final double STEP_RATIO = 0.1;

    private SpinnerNumberModel model;

    public DoubleSpinner() {
        super();
        // Model setup
        model = new SpinnerNumberModel(0.0, -1000.0, 1000.0, 0.1);
        this.setModel(model);

        // Step recalculation
        this.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                Double value = getDouble();
                // Steps are sensitive to …
Run Code Online (Sandbox Code Playgroud)

java swing jspinner jformattedtextfield

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

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
查看次数