Swing/FileHistory のバックアップの現在との差分(No.7)
2024-02-02 (金) 11:46:37
概要
JMenu
に「最近使ったファイル(F
)」を履歴として追加していきます。
Screenshot
Advertisement
private FileHistory fh; 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.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()){ // 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(); } }
サンプルコード
解説
上記のサンプルでは「ファイル、開く」のJMenuItem
をクリックするとファイルのオープン履歴を「最近使ったファイル(F
)」のJMenu
中に追加しています。
- 履歴を表示する
JMenuItem
は3
件までに制限 - 履歴用の
JMenuItem
をメニューから選択するとそのファイルを履歴の先頭に移動(ファイルを開く処理などはない)- 実際に使用する場合はファイルを使用している箇所を修正したり、アプリケーションを終了する際に履歴を保存したりするコードを追加する必要がある