---
category: swing
folder: FileHistory
title: JMenuに最近使ったファイルを追加
tags: [JMenu, JMenuBar, File]
author: aterai
pubdate: 2003-11-10
description: JMenuに「最近使ったファイル(F)」を履歴として追加していきます。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTMffElRbI/AAAAAAAAAZQ/1d47Mop5D-0/s800/FileHistory.png
---
* Summary [#summary]
`JMenu`に「最近使ったファイル(`F`)」を履歴として追加していきます。
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTMffElRbI/AAAAAAAAAZQ/1d47Mop5D-0/s800/FileHistory.png)
* Source Code Examples [#sourcecode]
#code(link){{
private int MAXHISTORY = 3;
private void updateHistory(String str) {
fileHistoryMenu.removeAll();
fileHistoryCache.remove(str);
fileHistoryCache.add(0, str);
if (fileHistoryCache.size() > MAX_HISTORY) {
fileHistoryCache.remove(fileHistoryCache.size() - 1);
}
for (int i = 0; i < fileHistoryCache.size(); i++) {
String name = fileHistoryCache.get(i);
String num = Integer.toString(i + 1);
JMenuItem mi = new JMenuItem(new HistoryAction(name));
mi.setText(num + ": " + name);
mi.setMnemonic((int) num.charAt(0));
fileHistoryMenu.add(mi, i);
}
}
class HistoryAction extends AbstractAction {
private final String fileName;
public HistoryAction(String fileName) {
super();
this.fileName = fileName;
}
@Override public void actionPerformed(ActionEvent e) {
Object[] obj = {"本来はファイルを開いたりする。\n",
"このサンプルではなにもせずに\n",
"履歴の先頭にファイルを移動する。"};
JComponent c = (JComponent) e.getSource();
JOptionPane.showMessageDialog(c.getRootPane(), obj, VersionAction.APP_NAME,
JOptionPane.INFORMATION_MESSAGE);
updateHistory(fileName);
}
}
}}
* Description [#explanation]
* Description [#description]
上記のサンプルでは「ファイル、開く」の`JMenuItem`をクリックするとファイルのオープン履歴を「最近使ったファイル(`F`)」の`JMenu`中に追加しています。
- 履歴を表示する`JMenuItem`は`3`件までに制限
- 履歴用の`JMenuItem`をメニューから選択するとそのファイルを履歴の先頭に移動(ファイルを開く処理などはない)
-- 実際に使用する場合はファイルを使用している箇所を修正したり、アプリケーションを終了する際に履歴を保存したりするコードを追加する必要がある
* Reference [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JMenu.html JMenu (Java Platform SE 8)]
- [[Resourceファイルからメニューバーを生成>Swing/ResourceMenuBar]]
- [[JFrameの位置・サイズを記憶する>Swing/Preferences]]
* Comment [#comment]
#comment
#comment