概要

JMenuに「最近使ったファイル(F)」を履歴として追加していきます。

サンプルコード

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);
  }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは「ファイル、開く」のJMenuItemをクリックするとファイルのオープン履歴を「最近使ったファイル(F)」のJMenu中に追加しています。

  • 履歴を表示するJMenuItem3件までに制限
  • 履歴用のJMenuItemをメニューから選択するとそのファイルを履歴の先頭に移動(ファイルを開く処理などはない)
    • 実際に使用する場合はファイルを使用している箇所を修正したり、アプリケーションを終了する際に履歴を保存したりするコードを追加する必要がある

参考リンク

コメント