ファイルのタイプが .txt だけだと選択しやすいので、これを実装します。
public class MyFileFilter extends javax.swing.filechooser.FileFilter { String ext , msg; public MyFileFilter(String ex , String ms) { ext = ex; msg = ms; } public boolean accept(java.io.File f) { return f.getName().endsWith(ext); } public String getDescription() { return msg; } }
コンパイルだけします。実行できません。
前回の構成
public SanTakuF(){ setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加 JFileChooser chooser = new JFileChooser("./"); int retVal = chooser.showOpenDialog(this);
今回の構成
public SanTakuF(){ setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加 JFileChooser chooser = new JFileChooser("./"); MyFileFilter filter = new MyFileFilter(".txt" , "テキストファイル(*.txt)"); chooser.addChoosableFileFilter(filter); int retVal = chooser.showOpenDialog(this);
これで、最初から、.txtの拡張子のファイルだけを表示します。
ファイルタイプの右の▼をクリックすることで、「全てのファイル」に戻すことも可能です。
もしも、この改良の後で SanTaku.jar を作るならば、 jarコマンドにMyFileFilter.classを加える必用があります。
$ jar cvfm SanTakuF.jar SanTakuF.txt SanTakuF.class Mondaishuu.class Toi.class MyFileFilter.class
もちろん、何もしなければ新しいSanTakuF.javaはフィルターありで、古いSanTakuF.jarはフィルターなしでそれぞれ問題なく動きます。 でも、新しいSanTakuF.javaはMyFileFilter.classを使いますから、これをjarにするにはMyFileFilter.classを含めてパックしなければ 動かなくなります。
GUIでのjarの実行では指定しないとエラーが表示されません。MyFileFilter.classを忘れるとダブルクリックしても何も起こらないということになります。
この様な時は次の様なコマンドをうつと分かるかもしれません。
$ tail ~/.xsession-errors
こんなのが出てきたら、MyFileFilterがないと言っていると分かります。
Exception in thread "main" java.lang.NoClassDefFoundError: MyFileFilter Exception in thread "main" java.lang.NoClassDefFoundError: MyFileFilter Exception in thread "main" java.lang.NoClassDefFoundError: MyFileFilter Exception in thread "main" java.lang.NoClassDefFoundError: MyFileFilter
SanTakuF.java
public SanTakuF(){ setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加 JFileChooser chooser = new JFileChooser("./"); MyFileFilter filter = new MyFileFilter(".txt" , "テキストファイル(*.txt)"); chooser.addChoosableFileFilter(filter); int retVal = chooser.showOpenDialog(this);
SanTakuM.java
public SanTakuS(){ setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加 JFileChooser chooser = new JFileChooser("./"); MyFileFilter[] filter = { new MyFileFilter(".java" , "Java ファイル(*.java)") , new MyFileFilter(".class" , "class ファイル(*.class)") , new MyFileFilter(".txt" , "テキストファイル(*.txt)") }; for(int i = 0 ; i < filter.length ; i++){ chooser.addChoosableFileFilter(filter[i]); } int retVal = chooser.showOpenDialog(this);
これはやってみただけで、java,classファイルを選んでも三択問題はできません