【发布时间】:2011-08-29 09:58:45
【问题描述】:
我正在为我的游戏制作关卡编辑器。我有一个属性面板,我可以在其中修改所选对象的属性。我还有一个 Save 按钮来编写关卡 xml。
当编辑器组件失去焦点或Enter被按下时,一个字段编辑被提交(*)。这很好用,但唯一的问题是当我有这个动作序列时:
- 编辑字段
- 按保存按钮
因为,发生的事情是这样的:
- 我编辑了字段
- 我按下保存按钮
- 关卡已保存
- 字段失去焦点
- 修改已提交
如您所见,这是错误的顺序。当然,我希望该字段失去焦点,这会导致提交并然后保存关卡。
是否有技巧、hack 或解决方法使该字段首先失去焦点,然后执行保存按钮的动作侦听器?
提前致谢。
(* submit = 对字段的编辑也在对象属性中进行)
编辑:对于我使用带有focusLost 的FocusAdapter 的字段:
FocusAdapter focusAdapter = new FocusAdapter()
{
@Override
public void focusLost(FocusEvent e)
{
compProperties.setProperty(i, getColor());
record(); // For undo-redo mechanism
}
};
对于按钮,一个简单的 ActionListener 带有 actionPerformed`。
btnSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
// Save the level
}
});
【问题讨论】:
-
不知道您的代码是如何工作的,请在此处发布相关代码,因为还有其他选项可以使用
DocumentListener,或者使用AncesorListener,或者只是将FocucHell包装成invokeLater与myTextField.setText(myTextField.getText); -
@mKorbel:我尝试将保存过程包装到
invokeLater,但它的顺序仍然错误。 -
另见Q&A。
-
与
ActionListener和FocusListener与endless cycle不存在并发,如果禁用Focus会发生什么情况1) 为Action和Focus创建单独的空白,2)使用Boolean进行测试,是否从Focus开始,或者从JButton开始Action,3) 通过尝试错误设置events从Focus和Action的正确顺序,其中一个必须从firing events开始并首先结束,不知道compProperties.setProperty(i, getColor());和drecord();是什么以及与// Save the level的连接,我确定有你的A-Bomb