java - 动态创建JTextAreas?

标签 java swing user-interface

使用 WindowBuilder 在 Eclipse 中开发 GUI 并遇到了障碍..

我创建了一个带有下拉框的 JWindow,用于显示人员数组中的人员列表。我的类(class)结构是:

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个标签(Name、Age、Goals)及其各自的JTextAreas(Bob、20、Goal 1/Goal 2),因为Person的结构将来可能会发生变化。

最好的方法是什么?

谢谢!

最佳答案

如果我理解正确,您可以通过创建 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();

关于java - 动态创建JTextAreas?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38615094/

相关文章:

java - 很多读者,但当作者可以使用 HashMap java 时却没有

java - Parse.com Android SDK : estimatedData and serverData on ParseObject differ immediately after download

Java JTable 检测用户调整大小的列

java - 通过 GUI 上的按钮在文本字段中输入数字

JavaFX 列表就像 SceneBuilder 中的库一样

java - 使用构造函数复制对象,Java

java - 我的递归程序查找数组中的最小值不起作用

java - 向没有 java 的人部署 jar 的首选方法是什么?

swing - java网络编程的最佳框架?

java - JComboBox 项目未显示在 JTattoo LookAndFeel 中