高级格式化文本字段输入操作? [英] advanced formatted text field input manipulation?

查看:23
本文介绍了高级格式化文本字段输入操作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

First of all, I know I asked a similar question before but this one is different. I'm trying to make a calculator that makes the arithmetic mean of all the numbers that were inputted in the text fields that are editable. I have about 25 text fields however only 14-16 are editable at a time. The user has 3 jspinners to add or remove some editable text fields which are already in the program. My question is, how can you check which text fields are editable from those 25 and manipulate the data?

出于适度的目的,这个问题与另一个不同.在另一个问题中,我根本不具体,它是不同的,所以请打开这个问题,我需要帮助.

For moderation purposes, this question is different than the other. In the other question I was not specific at all, and it was different, so please leave this one open I need help.

推荐答案

一次解决一个问题.从一个有效的示例开始.将其更改为处理多个字段,如下所示.查找平均值现在是对 update() 的简单更改.

Solve one problem at a time. Start with an working example. Change it to handle multiple fields, as shown below. Finding the average is now a simple change to update().

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * @see https://stackoverflow.com/q/8703464/230513
 * @see https://stackoverflow.com/questions/6803976
 */
public class Adder extends JPanel {

    private static final int MAX = 3;
    private final List<JFormattedTextField> fields =
        new ArrayList<JFormattedTextField>();
    private final NumberFormat format = NumberFormat.getNumberInstance();
    private final JFormattedTextField sum = new JFormattedTextField(format);

    public Adder() {
        this.setLayout(new GridLayout(0, 1));
        for (int i = 0; i < MAX; i++) {
            JFormattedTextField tf = init();
            fields.add(tf);
            this.add(tf);
        }
        sum.setHorizontalAlignment(JFormattedTextField.RIGHT);
        sum.setEditable(false);
        sum.setFocusable(false);
        this.add(sum);
    }

    private JFormattedTextField init() {
        JFormattedTextField jtf = new JFormattedTextField(format);
        jtf.setValue(0);
        jtf.setHorizontalAlignment(JFormattedTextField.RIGHT);
        jtf.addFocusListener(new FocusAdapter() {

            @Override
            public void focusLost(FocusEvent e) {
                EventQueue.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        update();
                    }
                });
            }
        });
        jtf.addPropertyChangeListener("value", new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent e) {
                update();
            }
        });
        return jtf;
    }

    private void update() {
        long total = 0;
        for (JFormattedTextField tf : fields) {
            Number v = (Number) tf.getValue();
            total += v.longValue();
        }
        sum.setValue(total);
    }

    private void display() {
        JFrame f = new JFrame("Adder");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Adder().display();
            }
        });
    }
}

这篇关于高级格式化文本字段输入操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆