Java Swing:焦点问题
发布时间:2020-12-15 00:44:09 所属栏目:Java 来源:网络整理
导读:我正在为我的游戏制作关卡编辑器.我有一个属性面板,我可以在其中修改所选对象的属性.我还有一个Save按钮来编写级别xml. 当编辑器组件失去焦点或按下Enter时,将提交字段编辑(*).这很有效,但唯一的问题是,当我有这一系列的动作时: 编辑一个字段 按保存按钮 因
我正在为我的游戏制作关卡编辑器.我有一个属性面板,我可以在其中修改所选对象的属性.我还有一个Save按钮来编写级别xml.
当编辑器组件失去焦点或按下Enter时,将提交字段编辑(*).这很有效,但唯一的问题是,当我有这一系列的动作时: >编辑一个字段 因为,会发生什么: >我编辑该字段 如您所见,这是错误的顺序.当然我希望该字段失去焦点,这会导致提交然后保存级别. 是否有技巧,黑客或解决方法使字段首先失去焦点,然后执行保存按钮的动作侦听器? 提前致谢. (* submit =字段的编辑也在对象属性中进行) 编辑:对于我正在使用FocusAdost的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 } }); 解决方法
嗯…无法重现:在下面的片段中,丢失的内容总是在actionPerfomed之前得到通知,独立于我是否单击按钮或使用助记符:
final JTextField field = new JTextField("some text to change"); FocusAdapter focus = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { LOG.info("lost: " + field.getText()); } }; field.addFocusListener(focus); Action save = new AbstractAction("save") { @Override public void actionPerformed(ActionEvent e) { LOG.info("save: " + field.getText()); } }; save.putValue(Action.MNEMONIC_KEY,KeyEvent.VK_S); JButton button = new JButton(save); JComponent box = Box.createHorizontalBox(); box.add(field); box.add(button); 另一方面,焦点是依赖的棘手属性,排序可能是系统依赖的(我的是胜利视野).检查代码段在您的代码上的行为方式. >如果您看到与我相同的序列,则问题出在其他地方 Action save = new AbstractAction("save") { @Override public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { LOG.info("save: " + field.getText()); } }); } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |