的基本想法是,當你調用「另存爲」,你需要記住「其中」保存到(和/或允許「保存」做同樣的事情)
在我看來,這種手段一個模型...
public interface FileModel {
public File getCurrentFile();
}
public interface MutableFileModel extends FileModel {
public void setCurrentFile(File file);
}
這裏的想法是限制誰可以改變當前文件。
public class DefaultFileModel implements MutableFileModel {
private File currentFile;
public File getCurrentFile() {
return currentFile;
}
public void setCurrentFile(File file) {
currentFile = file;
}
}
有了一個「默認」的實現,你可以通過這個在以往任何時候FileModel
或MutableFileModel
需要
接下來,我們需要的收官之功能
public abstract class AbstractFileAction<M extends FileModel> extends AbstractAction {
private M model;
public AbstractFileAction(M model) {
this.model = model;
}
protected M getModel() {
return model;
}
}
public class SaveFileAction<M extends FileModel> extends AbstractFileAction<M> {
public SaveFileAction(M model) {
super(model);
putValue(NAME, "Save");
putValue(MNEMONIC_KEY, KeyEvent.VK_S);
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
}
@Override
public void actionPerformed(ActionEvent evt) {
File file = getModel().getCurrentFile();
if (file != null) {
//...
}
}
}
public class SaveFileAsAction extends SaveFileAction<MutableFileModel> {
public SaveFileAsAction(MutableFileModel model) {
super(model);
putValue(NAME, "Save As...");
putValue(MNEMONIC_KEY, KeyEvent.VK_A);
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_DOWN_MASK));
}
@Override
public void actionPerformed(ActionEvent evt) {
File file = //...
getModel().setCurrentFile(file);
super.actionPerformed(evt);
}
}
這裏,我決定使用Action
API,因爲它提供了自包含,可重用和易於擴展的類的功能,如您所見,SaveFileAsAction
的核心功能來自SaveFileAction
,no需要重複自己。
然後你只需要設置一切,爲用戶...
DefaultFileModel model = new DefaultFileModel();
JMenu menu = new JMenu("File");
menu.add(new SaveFileAction(model));
menu.add(new SaveFileAsAction(model));
JMenuBar mb = new JMenuBar();
mb.add(menu);
現在,這是一個過於簡單的例子,我可能會一個觀察者模式添加到模型來生成事件模型時已更改並更新SaveFileAction
的狀態,或者如果模型的值爲null
,允許SaveFileAction
提示用戶輸入File
,但我會留給您弄清楚。
看一看How to use Actions更多細節
我建議要看看[如何使用行動](http://docs.oracle.com/javase/tutorial/uiswing/misc/ action.html),基本思想是,你需要知道什麼「保存到」保存到,所以你在使用「保存」時重新使用它 – MadProgrammer
只需跟蹤哪個文件在變量中打開並使用作爲地址保存到 – nhouser9