#navi(../)
*JMenuにアイテムを追加 [#rfdbc890]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2003-10-07~
更新日:&lastmod;

#contents
**概要 [#z0413747]
JMenuに最近使ったファイルを履歴として追加してみます。

**サンプルコード [#u0f87931]
 private FileHistory fh;
 private JMenuItem noFile = new JMenuItem("なし");
 private JMenu fileHistory;
 private void initHistory() {
   int hmax = 0;
   if(prefs.getBoolean("flag_history", true)) {
     hmax = prefs.getInt("history_size", 6);
   }
   fh = new FileHistory(prefs, "style", hmax);
   JMenu fm = getMenu("file");
   if(fileHistory==null) {
     fileHistory = new JMenu("最近使ったファイル(F)");
     fileHistory.setMnemonic('F');
     JMenuItem exit = getMenuItem("exit");
     fm.remove(exit);
     fm.add(fileHistory);
     fm.addSeparator();
     fm.add(exit);
   }else{
     fileHistory.removeAll();
   }
   Vector vl = fh.getModel();
   if(vl.size()<=0) {
     noFile.setEnabled(false);
     fileHistory.add(noFile);
   }else{
     fm.remove(noFile);
     for(int i=0;i<vl.size();i++) {
       String name = (String)vl.elementAt(i);
       String num  = Integer.toString(i+1);
       JMenuItem mi = new JMenuItem(new HistoryAction(new File(name)));
       mi.setText(num + ": "+ name);
       byte[] bt = num.getBytes();
       mi.setMnemonic((int) bt[0]);
       fileHistory.add(mi);
     }
   }
 }
 private void updateHistory(String str) {
   fileHistory.removeAll();
   Vector vl = fh.getModel();
   for(int i=0;i<vl.size();i++) {
     String name = (String)vl.elementAt(i);
     String num  = Integer.toString(i+1);
     JMenuItem mi = new JMenuItem(new HistoryAction(new File(name)));
     mi.setText(num + ": "+ name);
     byte[] bt = num.getBytes();
     mi.setMnemonic((int) bt[0]);
     fileHistory.add(mi, i);
   }
 }
 class HistoryAction extends AbstractAction{
   final private File file;
   public HistoryAction(File file_) {
     super();
     file = file_;
   }
   public void actionPerformed(ActionEvent evt) {
     //現在編集しているファイルをセーブするかどうか
     //if(!isSaved()) {
     //  Object[] obj = {"「"+getTitlePath()+"」は変更されています。",
     //  "別のスタイルシートを開く前に保存しますか?"};
     //  java.awt.Toolkit.getDefaultToolkit().beep();
     //  int retValue = JOptionPane.showConfirmDialog((JPanel)null, 
     //  obj, "APP_NAME", JOptionPane.YES_NO_CANCEL_OPTION);
     //  if(retValue!=JOptionPane.YES_OPTION) {
     //    return;
     //    }
     //}
     //以下、ファイルをロードするためのコード
     //Thread loader = new FileLoader(file);
     //loader.start();
   }
 }


**解説 [#p7efb749]
アプリケーションを再起動しても、これらのファイル履歴を残しておきたい場合は、Preferencesなどを使用する方法があります。

**参考リンク [#k3eb0d01]
-[[JFrameの位置・サイズを記憶する>Swing/Preferences]]

**コメント [#j906ef87]
#comment