ActionListeners,多个字段更新以及从文件重新加载用户GUI选择

时间:2014-03-07 19:07:07

标签: java swing awt auto-update jformattedtextfield

我有多个地方可以在一个坐标系和另一个坐标系之间进行转换。在每种情况下都有一个余弦/正弦计算,我们称之为x,y和x',y'。这些都是JFormattedTextFields。

如果用户在4中的任何一个中输入值,则会调用ActionListener。让我们调用字段fieldx,fieldy,fieldx1和fieldy1。如果用户在fieldx或fieldy中输入任何内容,我将使用fieldx和fieldy中的当前值更新fieldx1和fieldy1的键盘和焦点侦听器(所有四个字段都是相同的)。如果对侦听器的调用来自fieldx1或fieldy1,则会计算fieldx和fieldy。

然后我决定在配置文件中保存所选字段(包括一堆复选框开/关和一些微调器的值)(开发后的新要求)。我认为通过设置值和状态一切都会好的但是某些事情没有发生(在幕后)。我认为部分原因是各种检查和输入等触发方法没有发生,因为当它们被一段代码设置时,字段没有触发键盘和焦点监听器。

在线阅读之后,我将所有的KeyboardAdapter更改为ActionListener,在我设置了值之后,我在上面提到的字段上调用了postActionEvent(),现在所有的后台内容都发生了(虽然顺序是个问题但我要保存有关状态的额外信息,以便正确更新)。我做了这个改变是因为我认为发起这么多虚假的键盘事件会更加困难吗?

可能有更聪明/聪明的方法可以做到这一点但是现在我试图不要触及过多的代码。

  1. 有没有人建议保存面板的状态并刷新它(当前对象,面板)?

  2. 如果我继续这样做,有人可以建议一种方法来最小化ActionListener触发的时间吗?它似乎经常发射它是荒谬的!

  3. 我应该按照此处的建议做事吗?

    Should your class implement ActionListener or use an object of an anonymous ActionListener class

    这似乎涉及更多的编码,但在触发的时候更准确......

    如果此类问题/讨论不合适,请告诉我:)。只需输入此页面,我就会想到更多要阅读和尝试的内容。

1 个答案:

答案 0 :(得分:13)

  

我试图不要碰太多代码。

这是一个基本错误;垃圾桶是一个重要的设计工具,一个或多个minimal examples在学习构建更复杂的应用程序时非常宝贵。

  

有没有人建议保存面板的状态并刷新它(当前对象,面板)?

使用Model–View–Controller pattern,程序的数据应该存储在合适的模型中,并且当模型元素在中呈现时,应该进行转换>视图; Converter示例显示了如何管理自定义事件,此example扩展了主题

  

如果我继续这样做,有人可以建议一种方法来最小化ActionListener触发的时间吗?

正如原始article中所建议的那样,使用Action来封装行为。请参阅Java SE Application Design With MVC: Issues With Application Design以深入了解问题。