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并计算?的主要内容,如果未能解决你的问题,请参考以下文章