所以我有一個程式,用戶可以在其中從下拉串列中選擇不同的團隊;這是 JComboBox 的代碼:
JComboBox<String> homeSelector = new JComboBox<String>(this.getTeamNames(Team.teamList));
teamList 是一個公共靜態 ArrayList,屬于公共 Team 類,存盤所有可選擇的球隊;這是在啟動時從應用程式的檔案初始化的(我沒有為此應用程式使用資料庫)。所以這是我遇到的問題:我知道 JComboBox 可以使用 String[] 引數為用戶自動生成選擇選項,但是我很難以編程方式實際生成 String[] 。為了明白我的意思,這是我上面看到的 getTeamNames() 方法的代碼:
private Object[] getTeamNames(ArrayList<Team> teams) {
ArrayList<String> teamNames = new ArrayList<String>();
for(int i = 0; i < teams.size(); i ) {
Team selected = teams.get(i);
String name = selected.getName();
teamNames.add(name);
}
return teamNames.toArray();
}
如您所見,getTeamNames() 回傳一個 Object[],我知道它與 String[] 的型別不匹配。這樣做的原因是因為在我使用回傳 String[] 的方法之前;但是因為 toArray() 方法總是回傳一個 Object[],我試圖將 Object[] 轉換為 String[](像這樣:(String[])teamList.toArray()) 根據我的 IDE 這很好,但是導致程式因錯誤“類轉換例外”而崩潰。但另一方面,它顯然也不適用于 Object[],因為 JComboBox() 建構式未定義引數 Object[]。
所以我想知道的是,有沒有更好的方法來做到這一點?最好不必在所有團隊資料中手動硬編碼,因為那真的很糟糕(更不用說這肯定不是一個干凈或優雅的解決方案)。唯一的問題是我看不到您將如何以編程方式創建獨立的 Array 物件(這在 Java 中甚至可能嗎?),因為 Array 類似乎總是與介面(即 ArrayList、ArrayDeque 等)結合在一起這些也不是 JComboBox 建構式的合法引數。與往常一樣,非常感謝任何和所有幫助。
uj5u.com熱心網友回復:
你可以寫:
private String[] getTeamNames(ArrayList<Team> teams) {
String[] teamNames = new String[teams.size()];
for(int i = 0; i < teams.size(); i ) {
teamNames[i] = teams.get(i).getName();
}
return teamNames;
}
如果您的學習將您帶到 JavaFX,那將具有更現代的 UI 編程感覺。在 JavaFX 中,您甚至可以將組合框系結到陣列,因此如果您更改陣列,組合框會自動反映這些更改。
uj5u.com熱心網友回復:
您可以創建,JComboBox<Team>因為JComboBox顯示的是toString(在您的情況下) class 的方法回傳的字串Team。因此重寫toString類中的方法Team并讓它回傳團隊名稱。
public class Team {
String name;
public String toString() {
return name;
}
}
因此,您可以創建JComboBox類似的內容。
JComboBox<Team> homeSelector = new JComboBox<Team>(Team.teamList.toArray());
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/347840.html
上一篇:為什么沒有列印正確的陣列值?
