我正在使用基於Eclipse的軟件,該軟件允許創建應用程序並自動提供默認用戶界面。 我想修改這個接口(例如更改按鈕圖標,前景色等),但不幸的是我無法修改源代碼,所以我試圖通過Java反射來實現。 由於像JD-GUI這樣的軟件,我無論如何都可以對已編譯的jar文件有所瞭解,但我不想修改和重新編譯jar。 問題是,這個接口是通過擴展Swing組件的定製類來構建的,並且在查看jar文件時,我發現了一些惱人的技巧。如下的例子:通過反射調用超類方法
final class MyToggleButton extends JToggleButton{
MyToggleButton (ImageIcon defaultIcon){
super.setIcon(defaultIcon);
}
@Override
public void setIcon(Icon icon){}
}
通過內置在這樣的類,如果我調用的setIcon()方法MyToggleButton的一個實例,它沒有影響,因爲重寫方法內部不代碼(我認爲)。所以我不能改變它們在特定按鈕上默認設置的圖標。
有沒有人知道一種方法來解決這個問題? 在此先感謝您的幫助。
P.S.我不是一個傑出人物,但我很熟悉反思。
你好,謝謝你的迴應。爲了確保我明白了,這是否意味着,由於上述源代碼,無法更改JToggleButton的圖標? – Roberto
更改圖標最簡單的方法是解壓縮.jar文件,更改包含圖標的文件並重新打包。這比反編譯和重新編譯類要容易得多,而且比任何可能出現的反射技巧都要可靠得多。 – yole