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