2016-03-31 4 views
2

FileFilterオブジェクトのtoString()メソッドをオーバーライドします。 私は[email protected][description=PNG extensions=[.png]]の線に沿って何かを出力コードスイングクラスのtoString()をオーバーライドします。

JFileChooser saveFile = new JFileChooser(); 
saveFile.setAcceptAllFileFilterUsed(false); 
saveFile.setMultiSelectionEnabled(false); 
saveFile.setFileFilter(new FileNameExtensionFilter("PNG", ".png")); 
String type = saveFile.getFileFilter().toString(); 
System.out.println(type); 

のこの作品を持っています。私の目標は、オーバーライドされたtoStringメソッドを作成することです。したがって、.png部分のみを取得します。
私は、この正確なタスクをより効率的に行う方法があることを知っており、必要な部分を得るための基本的な文字列関数を知っていますが、私の目標はオーバーライドされた方法で行います。

+4

は(JFileChooserのを拡張するクラスを作成してのtoStringをオーバーライドする) – Tokazio

+0

)(あなたはFileFilter.getDescriptionを使用してみましたか?キャストをしたくない場合は、FileNameExtensionFilterをサブクラス化してtoStringをオーバーライドする必要があります。 – ControlAltDel

+0

"私は必要な部分を得るための基本的な文字列関数を知っています" - なぜあなたはそれを使わないのですか?なぜメソッドをオーバーライドしたいのですか(クラスが最終的なので不可能です)。 –

答えて

3

私の目標は、オーバーライドされたメソッドでそれを行うことです。

これは、以下に説明されるいくつかの理由により不可能です。それを行う唯一の方法は、継承を通してではなく、合成による方法です。

自分が所有するクラスでのみメソッドをオーバーライドできます。 FileNameExtensionFilterを所有していないため、FileFilterの実装ではJFileChooserが返されますので、toStringメソッドをオーバーライドする方法はありません。

さらに、FileNameExtensionFilter is a final classです。そのため、そのメソッドをオーバーライドすることはできません。

この状況で利用できる唯一の方法は、自分自身でFileFilterをラップしてFileNameExtensionFilterとし、JFileChooserから取得するフィルタを渡すことです。必要に応じて、あなたがそのtoStringをオーバーライドすることができますので、あなたは、このクラスを所有します:

class FileFilterWrapper { 

    private final FileFilter innerFilter; 

    public FileFilterWrapper(FileFilter innerFilter) { 
     this.innerFilter = innerFilter; 
    } 

    @Override 
    public String toString(){ 
     // Use innerFilter properties to produce the desired String 
     return ... 
    } 
} 
+0

注:最終クラスとして、FileNameExtensionFlterを拡張することはできません。したがって、「それを行う唯一の方法は合成によるものです」という文章。 – DwB

+0

@DwBそうです、それは、「さらに、...」というパラグラフが言っていることです。 – dasblinkenlight

+0

@dasblinkenlight最後の段落について詳しく説明できますか?私はあなたの説明を一般的に理解していますが、 "FileNameExtensionFilter'をラップするクラスを作成する方法については気にしません。 – Rywi

2

あなたは文字通りちょうどここでそれをしたい場合、あなたはそれのために匿名の内部クラスを行うことができます:私はそのアプローチをお勧めすることはできません

JFileChooser saveFile = new JFileChooser() { 
    @Override 
    public String toString() { 
     return ".png"; 
    } 
} 

、独自のサブクラスを実装する方が良いだろうJFileChooserとその内部に新しいString getFileExtension()メソッドを定義します。

2

これを行うには、JFileChooserのサブクラスを使用する必要があります。それがあなたが上書きしたい唯一の方法であれば、それは非常に簡単です。

public class MyFileChooser extends JFileChooser{ 
    public MyFileChooser(){ 
     super(); 
    } 

    @Override 
    public String toString(){ 
     //your string conversion code here 
    } 
} 
関連する問題