在LinkedHashMap中使用JTextField的JLabel

时间:2017-01-15 21:36:56

标签: java swing collections hashmap iteration

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

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

现在,我JLabel存储了一个JTextfield(KEY)和LinkedHashMap(VALUE),

  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);
  }

并且在用户设置特定年份的总天数后,它们将被添加到面板中。

编辑 - 注意:在HashMap中使用这两个的原因是我无法在舔上创建元素,否则我可以创建无限的标签和文本字段,我不希望使用buttonpressed=true或者这样的。我需要两个文本字段和标签&#39;准​​备好&#39;点击之前点击&#39;发生的情况。

 for (Map.Entry<JLabel, JTextField> entry : weeksMap.entrySet()) {
        index++;
        weeksPane.add(entry.getKey()); 
        weeksPane.add(entry.getValue());
 }

GUI视图

如何获取例如&#39;第23周&#39;的文本字段? for循环遍历List并正确添加Objects,但我不再引用该某个对象。

2 个答案:

答案 0 :(得分:0)

您可以使用一个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);
}

在更新事件中,您可以使周表格无效并重绘

答案 1 :(得分:0)

我可以想到一个简单的解决方案,即将两个单独的LinkedHashMap设为LinkedHashMap&lt;整数,JLabel&gt;另一个是LinkedHashMap

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

希望这可以解决您的问题。