使用WindowBuilder在Eclipse中使用GUI并遇到障碍..
我创建了一个带有下拉框的JWindow,用于显示人员阵列中的人员列表。我的课程结构是:
public class Person {
String name;
int age;
ArrayList<Goal> goals;
}
public class Goal {
String name;
int daysToComplete;
}
在此JWindow GUI中,下拉框列出了所有Person实例。一旦我选择一个人(让他们说Bob) - 我想动态创建标签和JTextAreas以列出Bob的属性值,例如:
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 :(得分:0)
如果我理解正确,您可以通过创建JLabel
和JTextArea
的匿名实例并将它们放入数组列表中来获得所需内容。我不知道您的环境的细节,但希望您可以遵循这个想法:
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();
答案 1 :(得分:0)
您必须将新面板添加到主面板。因此,您的主面板应提供一个可滚动的内部面板,您可以在其中添加新行。如果您曾经使用过HTML和Tables,那么您将理解我在说什么。 获得此属性显示面板(内部面板)后,您可以根据需要使用for循环加载任意数量的属性。 代码在技术上与goalArray中的每个目标一样 - &gt;将新的linePanel添加到attribute-show-panel。 而linePanel yould存储标签,Attaton等,并且许多行面板将垂直列出