为swing类重写toString()

时间:2016-03-31 13:55:25

标签: java swing

我想覆盖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部分。
我知道有更有效的方法来完成这个确切的任务,我知道基本的字符串函数来获得我需要的部分,但我的目标是使用重写的方法来完成它。

3 个答案:

答案 0 :(得分:3)

  

我的目标是使用重写方法。

由于以下描述的多种原因,这是不可能的。唯一的方法是通过组合,而不是通过继承。

您只能在您拥有的类中覆盖方法。由于您不拥有Item FileNameExtensionFilter的实施FileFilter,因此您无法覆盖其JFileChooser方法。

此外,FileNameExtensionFilter is a final class,因此您无法覆盖其任何方法。

在这种情况下,唯一可用的方法是创建自己的toString包裹FileFilter,并将其从FileNameExtensionFilter传递给您。您将拥有此类,因此您可以根据需要覆盖其JFileChooser

toString

答案 1 :(得分:2)

如果你真的只想在这里做,你可以为它做一个匿名的内部类:

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

我不能推荐这种方法,最好是实现自己的JFileChooser子类,并在其中定义一个新的String getFileExtension()方法。

答案 2 :(得分:2)

为此,您需要使用JFileChooser的子类。如果这是你想要覆盖的唯一方法,那很简单。

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

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