2016-07-27 17 views
1

使用WindowBuilder在Eclipse中使用GUI並碰到一個障礙。動態創建JTextAreas?

我創建了一個帶下拉框的JWindow,用於顯示人員數組中的人員列表。我的課程結構如下:

public class Person { 
    String name; 
    int age; 
    ArrayList<Goal> goals; 
} 

public class Goal { 
    String name; 
    int daysToComplete; 
} 

在此JWindow GUI中,下拉框列出了所有Person實例。有一次,我選擇一個人(假設鮑勃) - 我要動態地創建標籤和JTextAreas列出了鮑勃的屬性值,例如:

Name: Bob 
Age: 20 
Goals: 
    - Goal 1, complete in X days 
    - Goal 2, complete in Y days 

等等..我不想要靜態加3標籤(姓名,年齡,目標)和他們各自的JTextAreas(Bob,20,目標1 /目標2),因爲Person的結構將來可能會發生變化。

這樣做的最好方法是什麼?

謝謝!

+0

你不能只存儲你所有的人信息在一個'JTextArea'? – mayha

+0

用戶應該能夠更新和更改個人信息(然後將其保存回數組),所以我不認爲一個大的JTA會是合理的。 – Hazim

+0

我想你要找的是[思考](https://docs.oracle.com/javase/tutorial/reflect/) - 可是沒有任何經驗,所以我不能幫助你:/ – mayha

回答

0

如果我正確地理解了你,你可以通過創建JLabelJTextArea的匿名實例並將它們放到數組列表中來得到你想要的結果。我不知道你的環境的具體情況,但我希望,你可以按照這個想法:

ArrayList<JLabel> nameLabelList = new ArrayList<JLabel>(); 
ArrayList<JLabel> ageLabelList = new ArrayList<JLabel>(); 
ArrayList<Goal> goalList = new ArrayList<Goal>(); 

// Event handler method 

public void personSelected(person) 
{ 
    nameLabelList.add(person.name); 
    ageLabelList.add(person.age); 
    // This assumes each person has a single goal. You can adapt the code 
    // for multiple goals easily 
    goalLabelList.add(person.goal); 
} 

然後,創建列表後,所有你需要做的就是遍歷這些數組列表然後將它們吐出到你的UI:

for(int counter = 0; counter < nameLabelList.size; counter++) 
{ 
    myContainer.add(nameLabelList.get(counter)); 
    myContainer.add(ageLabelList.get(counter)); 
    myContainer.add(new JLabel(goalList.get(counter).toString())); 
} 

加入數組列表中的內容後,確保他們在UI中顯示:

myContainer.revalidate(); 
    myContainter.repaint(); 
0

您將有新的面板添加到主面板。因此,您的主面板應該提供一個可滾動的內部面板,您可以在其中添加新行。如果你曾經使用過HTML和表格,你會明白我在說什麼。 一旦你得到了這個屬性顯示面板(內部面板),你可以隨心所欲地加載for循環的屬性。 這個代碼在技術上會像goalArray中的每個目標 - >將新的linePanel添加到屬性顯示面板。 而linePanel yould存儲一個標籤,abutton等和許多線面板將垂直列出