2014-05-15 30 views
0

我在寫一個「簡單」Java程序,讓用戶更改桌面牆紙。 它基本上從用戶選擇的目錄中填充帶有文件的JList,並且用戶雙擊以將其中一個文件設置爲壁紙。簡單!Java,擴展文件以獲得更多屬性

我想,雖然一些屬性(布爾isFavorite,例如)爲程序更多的功能,但我不知道如何做到這一點...

我試圖使我自己的類壁紙其中擴展了File,但是當試圖用壁紙填充我的JList時,我在文件和壁紙之間切換時遇到了各種類轉換錯誤。所以我最終覆蓋了越來越多的File方法,直到我陷入如此深度的神祕錯誤網絡中,我不知道如何擺脫。

我得到了我的填充與JList的安德魯誰在他的回答也使這裏的文件的想法:JList that contains the list of Files in a directory

礦看起來像這樣,

File wallFile = new File(System.getProperty("user.home")); 

//Create the file array 
File[] fileArray = wallFile.listFiles(new TextFileFilter()); 

//Put File objects in the list 
JList<File> fileList = new JList<File>(fileArray); 

因爲我知道,我不是做什麼在這裏我是獨一無二的,我知道應該有「批准」的方式來做到這一點,那麼請大家指教一下從內置文件更改爲自定義壁紙的最佳方式嗎?

回答

1

listFiles()方法將使用默認的File類,而不是擴展的WallPaper類。因此,如果您嘗試將其中一個對象投射到牆紙上,您將會遇到錯誤。相反,這樣做:

String [] nameArray = wallFile.list(new TextFileFilter()); 
File [] fileArray = new File [nameArray.length]; 
for (int i=0;i<nameArray.length;i++) 
    fileArray[i] = new WallPaper(new File(wallFile, nameArray[i]).getAbsolutePath());//provided you have a WallPaper constructor that accepts an absolute path 
+0

我的Wallpaper類中的構造函數只需要一個String參數(String filePath),然後調用「super(filePath);」我不確定是否應該通過super()調用File構造函數,還是應該自己創建...我仍然被這些面向對象的編程設計所困惑。 – Dunderklumpen

+0

@Dunderklumpen你所描述的聽起來不錯。保留super(filePath)位。 – schmop

+0

好吧,我不得不改變一下,不得不改變「File [] fileArray」到「Wallpaper [] fileArray」並在一堆地方改變文件到牆紙,但它似乎現在正常工作,字段「isFavorite 「可以使用。非常感謝您快速簡單的回答! – Dunderklumpen