問題 我正在使用Swing在java中進行文本編輯。我有一個按鈕,保存文件,使用這種方法:文本編輯器java Swing actionListener保存文件
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;
}
它增加了星號回的標題。我希望它在沒有星號的情況下顯示它,因爲它已被保存。如何確保textAreaKeyTyped方法在動作偵聽器調用save方法時不會拾取輸入。
鍵綁定的ActionListener:
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),其餘的問題不明確沒有SSCCE硬編碼字符串值爲JTextAreas模型(文檔) – mKorbel