我正在为我的游戏制作一个关卡编辑器。我有一个属性面板,可以修改所选对象的属性。我还有一个“保存”按钮,用于编写关卡xml。
当编辑器组件失去焦点或按下Enter键时,就会提交字段编辑(* )。这个功能非常棒,但唯一的问题是,当我执行以下操作序列时:
1.编辑字段 2.按下保存按钮
因为实际发生的情况是:
1.我编辑了字段 2.我按下了保存按钮 3.级别被保存 4.字段失去了焦点 5.编辑提交
如您所见,这是错误的顺序。当然,我希望该字段失去焦点,从而导致提交和然后保存级别。
是否有技巧、方法或解决方法可以让字段先失去焦点,然后执行保存按钮的操作监听器?
提前感谢。
(*提交=对对象属性进行的编辑也会提交给编辑器)
编辑:对于该字段,我使用了一个具有
当编辑器组件失去焦点或按下Enter键时,就会提交字段编辑(* )。这个功能非常棒,但唯一的问题是,当我执行以下操作序列时:
1.编辑字段 2.按下保存按钮
因为实际发生的情况是:
1.我编辑了字段 2.我按下了保存按钮 3.级别被保存 4.字段失去了焦点 5.编辑提交
如您所见,这是错误的顺序。当然,我希望该字段失去焦点,从而导致提交和然后保存级别。
是否有技巧、方法或解决方法可以让字段先失去焦点,然后执行保存按钮的操作监听器?
提前感谢。
(*提交=对对象属性进行的编辑也会提交给编辑器)
编辑:对于该字段,我使用了一个具有
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
,也可以使用AncestorListener
,或者只需将您的FocusHell
包装到invokeLater
中,并使用myTextField.setText(myTextField.getText);
- mKorbelActionListener
和FocusListener
之间是否存在“无限循环”的并发问题,如果禁用Focus
会发生什么?1)为Action
和Focus
创建单独的void
,2)通过使用Boolean
进行测试,如果有Focus
开始,或者从JButton
开始Action
,3)通过尝试故障设置Focus
和Action
事件的正确顺序,其中一个必须开始“firing events”并首先结束,不知道compProperties.setProperty(i, getColor());
和record();
以及与“// Save the level”连接的内容是什么,我确定这是你的“A-Bomb”。 - mKorbel