java swing得到所有可编辑的jformattedtextfields并计算?

时间:2011-12-30 14:08:18

标签: java swing

我正在尝试制作一个基本类似的计算器:用户输入大约18-19个值,然后按下一个按钮,结果等于他的输入总和除以字段数。 然而,它远比那复杂得多。用户可以指定一些添加更多输入字段的选项(基本上可以选择使jformattedtextfield可编辑,默认情况下它是不可编辑的),这可能是一个巨大的时间,因为我必须写一个巨大的IF语句,我我讨厌做。基本上,用户可以激活一些jSpinner,使得jFormattedTextFields比默认选项更可编辑。我要问的是,你怎么能检查哪些jformattedtextfields是可编辑的,哪些不是,然后用可编辑的那些进行操作?

4 个答案:

答案 0 :(得分:2)

DocumentListener添加到所有JFormattedTextFields并从Number实例获取值,例如对于Float

if (someTextField.isEditable()){ 
    float newValue = (((Number) resistorValue.getValue()).floatValue());
}

答案 1 :(得分:1)

首先,确定放置jformattedtextfield的容器,然后使用JContainer API遍历所有子组件并使用instanceof过滤所有jformattedtextfield组件。

例如:

public static int calcIfEnabled(Container container) {
    int finalResult = 0;
    for (Component c : container.getComponents()) {
        if (c instanceof JFormattedTextField && c.isEnabled() && ((JFormattedTextField) c).isEditable()) {
            finalResult += Integer.parseInt(((JFormattedTextField) c).getText());
        }
    }
    return finalResult;
}

UPD: 当然,您可以使用递归包含所有子组件并传递主容器(JFrame),但从性能点来看它不会那么好。

public static int calcIfEnabled(Container container) {
    int finalResult = 0;
    for (Component c : container.getComponents()) {
        if (c instanceof JFormattedTextField && c.isEnabled() && ((JFormattedTextField) c).isEditable()) {
            finalResult += Integer.parseInt(((JFormattedTextField) c).getText());
        } else if (c instanceof Container) {
            finalResult += calcIfEnabled((Container) c);
        }
    }
    return finalResult;
}

答案 2 :(得分:1)

最简单的方法是在创建新数据时将JFormattedTextField添加到数组中。 然后在需要时,对数组进行迭代,并检查它是否可编辑。

答案 3 :(得分:1)

听起来您的模型可能足够复杂,无法保证使用Model View Controller模式。您的模型将指定哪些字段对于为给定控制器状态显示的视图有意义。它还可以确保显示的答案同样一致。 example可以提供额外的指导。