java swing获取所有可编辑的jformattedtextfields并计算?

Posted

技术标签:

【中文标题】java swing获取所有可编辑的jformattedtextfields并计算?【英文标题】:java swing get all editable jformattedtextfields and calculate? 【发布时间】:2011-12-30 14:08:18 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

首先确定放置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),但从性能角度来看它不会那么好。 p>

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;

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于java swing获取所有可编辑的jformattedtextfields并计算?的主要内容,如果未能解决你的问题,请参考以下文章

java中经常使用的Swing组件总结

Java,Swing,获取和更改所有输入字段

用于在 Java 中拖动组件的 Swing 库

java里的swing是啥意思,为啥取名swing

Java swing拖放记事本[关闭]

Swing组件