【发布时间】: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<JTextField>?甚至更好 - JTable 将是完美的。 -
和/或某种独立于 UI 管理信息的模型?
-
一个 Jtabel 最终会出现。独立管理信息的模型是将存储到 Arraylist 中的“Week”对象。它的值必须来自 JTextFields 中给出的值
-
@Hovercraft Full Of Eels 标签链接到TextField,因为它遵循相同的索引,那么为什么它不能成为TextField的Key?
-
JTextField[] textArray = new JTextField[numberOfWeeks]; for (int ii=0; ii< 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