【发布时间】:2013-12-17 13:29:30
【问题描述】:
问题 我正在使用 Swing 在 java 中制作文本编辑器。我有一个使用此方法保存文件的按钮:
private void save() {
if (savedAs) {
try {
PrintWriter fout = new PrintWriter(savedAsFile);
fout.print(textArea.getText());
fout.close();
this.setTitle("Text Editor - " + fileName);
saved = true;
} catch (FileNotFoundException ex) {
Logger.getLogger(TextEditorFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
savedAs 布尔值仅在第一次创建文件时为真,否则它只是保存它而不打开另存为文件选择器。当我使用该按钮时,一切正常,但是当我从键绑定中调用 save() 方法时,它会保存但由于此方法:
private void textAreaKeyTyped(java.awt.event.KeyEvent evt) {
this.setTitle("Text Editor - *" + fileName);
saved = false;
}
它将星号重新添加到标题中。我希望它在没有星号的情况下显示它,因为它已被保存。如何确保在操作侦听器调用 save 方法时 textAreaKeyTyped 方法不接收输入。
键绑定动作监听器:
public void initBindings() {
textArea.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(
KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_DOWN_MASK), "actionMapKey");
textArea.getActionMap().put("actionMapKey", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
save();
}
});
}
原因 我认为文本区域会拾取由用户键入 CTRL + S 引起的输入,因此将星号放在标题中。
谢谢!
【问题讨论】:
-
fout.print(textArea.getText());替换为 textArea.write(更多参见 API),如果没有带有 JTextAreas 模型(文档)硬编码字符串值的 SSCCE,剩下的问题就不清楚了
标签: java swing actionlistener text-editor key-bindings