Swing/FileHistory の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/FileHistory へ行く。
- Swing/FileHistory の差分を削除
--- 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] `JMenu`に「最近使ったファイル(`F`)」を履歴として追加していきます。 #download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTMffElRbI/AAAAAAAAAZQ/1d47Mop5D-0/s800/FileHistory.png) * サンプルコード [#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); } } }} * 解説 [#explanation] 上記のサンプルでは「ファイル、開く」の`JMenuItem`をクリックするとダミーファイルのオープン履歴を「最近使ったファイル(`F`)」の`JMenu`中に追加しています。 上記のサンプルでは「ファイル、開く」の`JMenuItem`をクリックするとファイルのオープン履歴を「最近使ったファイル(`F`)」の`JMenu`中に追加しています。 - 履歴を表示する`JMenuItem`は`3`件までに制限 - 履歴用の`JMenuItem`をメニューから選択するとそのファイルを履歴の先頭に移動(ファイルを開く処理などはない) -- 実際に使用する場合はダミーファイルを使用している箇所を修正したり、アプリケーションを終了する際に履歴を保存したりするコードを追加する必要がある -- 実際に使用する場合はファイルを使用している箇所を修正したり、アプリケーションを終了する際に履歴を保存したりするコードを追加する必要がある * 参考リンク [#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