Java LinkedHashMap中带有JTextFields的JLabel

Java LinkedHashMap中带有JTextFields的JLabel,java,swing,collections,hashmap,iteration,Java,Swing,Collections,Hashmap,Iteration,我有一个程序,其中一部分要求用户确定40周内每周的天数(def=5) 用户首先填写40周的天数,然后设置每周天数 现在,我将JLabel(键)和JTextfield(值)存储在LinkedHashMap中 LinkedHashMap<JLabel, JTextField> weeksMap = new LinkedHashMap<JLabel,JTextField>(); for (int i=1; i<=40; i++) { JLabel w

我有一个程序,其中一部分要求用户确定40周内每周的天数(def=5)

用户首先填写40周的天数,然后设置每周天数

现在,我将
JLabel
(键)和
JTextfield
(值)存储在
LinkedHashMap

  LinkedHashMap<JLabel, JTextField> weeksMap = new LinkedHashMap<JLabel,JTextField>();
  for (int i=1; i<=40; i++)  {
      JLabel weekL = new JLabel("Week "+i);
      JTextField weekF = new JTextField(10);
      weekF.setText("5");
            //SetWeekAction sWA = new SetWeekAction(mainPane, weekL, weekF);
            //weekF.addActionListener(sWA);
      weeksMap.put((weekL), weekF);
  }
GUI视图


如何获取例如“第23周”的文本字段?for循环遍历列表并正确添加对象,但我不再引用该特定对象

您可以使用一个
ArrayList
存储文本字段和标签文本

ArrayList<JTextField> weeks = new ArrayList<JTextField>();

for (int i=1; i<=40; i++)  {
    JTextField weekF = new JTextField(10);
    weekF.setName("Week "+i);
    weekF.setText("5");
    JLabel weekL = new JLabel(weekF.getName());
    weekL.setLabelFor(weekF);
    weeks.put(weekF);
}
ArrayList weeks=new ArrayList();

对于(int i=1;i,我可以想出一个简单的解决方案,将两个单独的LinkedHashMap一个作为LinkedHashMap,另一个作为LinkedHashMap

现在,在循环中,您可以使用循环中的int值作为JLabel和JTextField的键在LinkedHashMap中添加值,同时将它们存储在两个LinkedHashMap中。 由于JLabel和JTextField现在都根据创建它们的循环号附加了整数值,因此您可以使用这些整数值访问它们


希望这能解决您的问题。

为什么要映射JLabel和JTextField?这种链接有什么用?将字符串映射到JTextField的映射不是功能更强大吗?或者甚至可能是一个简单的
ArrayList
?或者更好-JTable将非常适合于此。和/或某种独立于UI?Jtabel最终就是它的来源。独立管理信息的模型是将存储到Arraylist中的“Week”对象。它的值必须来自在JTextFields@Hovercraft满是鳗鱼标签链接到文本字段,因为它遵循相同的索引,所以为什么可以它不是TextField的键吗?
JTextField[]textary=newjtextfield[numberOfWeeks];for(int ii=0;ii
可以通过数组访问文本字段,并且可以从索引推断星期。或者使用@hovercraftfullofels建议的
JTable
ArrayList<JTextField> weeks = new ArrayList<JTextField>();

for (int i=1; i<=40; i++)  {
    JTextField weekF = new JTextField(10);
    weekF.setName("Week "+i);
    weekF.setText("5");
    JLabel weekL = new JLabel(weekF.getName());
    weekL.setLabelFor(weekF);
    weeks.put(weekF);
}