如何保留ImageIcon的文件名以供日后参考?

时间:2012-06-28 18:34:14

标签: java string swing jbutton imageicon

鉴于此代码,

tableButton = new JButton(new ImageIcon("80F_FG2015.GIF"));

我如何才能将String返回给我,以便将其与另一个String进行比较?

3 个答案:

答案 0 :(得分:2)

解决问题的一种方法是创建

tableButton = new JButton(new ImageIcon("80F_FG2015.GIF", "80F_FG2015.GIF"));

第二个参数是描述。 ImageIcon.toString()方法返回描述。因此,您可以将此描述与其他图像图标

中的描述进行比较

您可以按如下方式取回说明:

System.out.println(((ImageIcon)tableButton.getIcon()).getDescription()); 
//or
System.out.println(((ImageIcon)tableButton.getIcon()).toString());

答案 1 :(得分:2)

您可以使用Reflection:

实现这一目标
    ImageIcon icon = new ImageIcon(pathImg);
    JButton jButton1 = new JButton(icon);
    Field field = null;
    try {
        Class<? extends ImageIcon> clazz = ((ImageIcon) jButton1.getIcon()).getClass();
        //Get the field "filename" where the Image path is stored. 
        field = clazz.getDeclaredField("filename");
        field.setAccessible(true);
        String path = (String) field.get(icon);
    } catch (NoSuchFieldException ex) {
        Logger.getLogger(AAMainWindow.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SecurityException ex) {
        Logger.getLogger(AAMainWindow.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalArgumentException ex) {
        Logger.getLogger(AAMainWindow.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        Logger.getLogger(AAMainWindow.class.getName()).log(Level.SEVERE, null, ex);
    }

答案 2 :(得分:1)

您可以创建一个扩展JButton的新类。将字符串存储在类中。

class MyButton extends JButton
{
    private String filename;

    public MyButton(String filename)
    {
        super(new ImageIcon(filename));
        this.filename = filename;
    }

    public String getFilename()
    {
        return filename;
    }
}