簡體   English   中英

為swing類重寫toString()

[英]Override toString() for swing classes

我想覆蓋FileFilter對象的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);

其中打印出javax.swing.filechooser.FileNameExtensionFilter@39cc65b1[description=PNG extensions=[.png]] 我的目標是創建一個重寫的toString方法,所以我只得到.png部分。
我知道有更有效的方法來完成這個確切的任務,我知道基本的字符串函數來獲取我需要的部分,但我的目標是使用重寫的方法來完成它。

我的目標是使用重寫方法。

由於下面描述的多種原因,這是不可能的。 唯一的方法是通過組合,而不是通過繼承。

您只能在您擁有的類中覆蓋方法。 由於您不擁有FileNameExtensionFilterJFileChooser返回的FileFilter實現),因此您無法覆蓋其toString方法。

而且, FileNameExtensionFilter是一個final ,因此您不能覆蓋它的任何方法。

在這種情況下唯一可用的方法是創建自己的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 ...
    }
}

如果你真的想在這里做,你可以為它做一個匿名的內部類:

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

我不能推薦這種方法,最好是實現自己的JFileChooser子類並在其中定義一個新的String getFileExtension()方法。

為此,您需要使用JFileChooser的子類。 如果這是您想要覆蓋的唯一方法,那么它非常簡單。

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

    @Override
    public String toString(){
        //your string conversion code here
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM