【问题标题】:JLabels with JTextFields in LinkedHashMap在 LinkedHashMap 中带有 JTextFields 的 JLabels
【发布时间】:2017-01-15 21:36:56
【问题描述】:

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

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

现在,我将 JLabel (KEY) 和 JTextfield (VALUE) 都存储在 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);
  }

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

编辑 - 注意:将这两个放在 HashMap 中的原因是我无法在 lick 上创建元素,否则我可以创建无限标签和文本字段,并且我不希望使用 buttonpressed=true 等。在“点击”发生之前,我需要“准备”文本字段和标签。

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

GUI 视图

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

【问题讨论】:

  • 为什么要映射 JLabel 和 JTextField?那个链接有什么用?将 String 映射到 JTextField 的 Map 不是更实用吗?或者甚至是一个简单的ArrayList&lt;JTextField&gt;?甚至更好 - JTable 将是完美的。
  • 和/或某种独立于 UI 管理信息的模型?
  • 一个 Jtabel 最终会出现。独立管理信息的模型是将存储到 Arraylist 中的“Week”对象。它的值必须来自 JTextFields 中给出的值
  • @Hovercraft Full Of Eels 标签链接到TextField,因为它遵循相同的索引,那么为什么它不能成为TextField的Key?
  • JTextField[] textArray = new JTextField[numberOfWeeks]; for (int ii=0; ii&lt; numberOfWeeks; ii++) { JTextField tf = new JTextField(40); textArray[ii] = tf; uiPanel.add(new JLabel("Week " + (ii+1))); uiPanel.add(tf); } 可以通过数组访问文本字段,并且可以从索引中推断出星期。或者按照@HovercraftFullOfEels 的建议使用JTable

标签: java swing collections hashmap iteration


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我可以想到一种简单的解决方案,即制作两个单独的 LinkedHashMap,一个为 LinkedHashMap ,另一个为 LinkedHashMap

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多