我正在尝试设计一个GUI,我真的陷入某个问题,这涉及到使用JComboBox来更改JLabel中的数据,但问题是JLabel中的数据来自组合框所需的对象数据。
示例:在每个区域设置中包含对象的假设arraylist:
ArrayList<Animals> FarmAnimals = new ArrayList<Animals>();
FarmAnimals.add(new Animals("Cows", "Black"));
FarmAnimals.add(new Animals("Pigs", "Pink");
FarmAnimals.add(new Animals("Sheep", "White"));
现在,我想用&#34; Cows&#34;,&#34; Pigs&#34;和&#34; Sheep&#34;来填充JComboBox,这很容易做成一个字符串数组价值。问题在于,当我假设选择&#34; Cows&#34;时,我想要一个颜色JLabel来显示&#34; Black&#34;,&#34; Pink&#34;和&#34;白&#34;分别在选择时:理想情况下来自阵列中的对象数据(以防万一我有更多的奶牛数据或者像我想要稍后输入的动物噪音的爪子大小或响度)。
有没有办法让ItemListener执行此操作,或者至少是否有一个教程显示如何直接影响与JComboBox中的内容关联的对象的JLabel数据?或者我只是愚蠢而且有更好的方法吗?感谢。
这可能是一个更好的例子:
http://pokemonshowdown.com/damagecalc/
请注意,当您更改EV或IV时,或者更换宠物小精灵时,侧面的统计数据会根据所选的宠物小精灵和EV&amp; D的变化直接改变。 IV输入。我想在GUI中制作这种行为(统计数据直接根据输入进行更改,我假设这些输入直接连接到为每个Pokey存储的对象数据。)但我似乎无法模仿它。
答案 0 :(得分:0)
这里的一种技巧是:
Animal
数据存储在数组中,就像您目前所做的那样。Animal
类提供一个接收相关对象数据的方法,以任何形式自然地表示它(例如,如果所有特定于动物的数据都是字符串列表,如颜色,{{1或者String[]
是保存此数据的好方法。我们称这个方法为List<String>
。getData()
以返回要在组合框中显示的动物的名称。Animal.toString()
将每个JComboBox.addItem
直接添加到组合框中。 Animal
直接检索所选的(Animal)comboBox.getSelectedItem()
。Animal
,您可以致电Animal
以获取要添加到标签中的数据。您也可以在此处调用theAnimal.getData()
的任何其他方法。基本上,上面的想法是利用Animal
直接存储和返回实际对象的能力。然后,您可以直接从选定的JComboBox
获取相关数据,并相应地更新其他GUI元素(例如您的标签)。
有关上述事项的几点注意事项:
Animal
以提供显示字符串并不适合您的情况(例如,正如MadProgrammer在评论中指出的那样,Animal.toString()
通常用于调试输出而不是有意义的信息对于用户而言,您还有其他选择。例如,您可以将toString()
添加到组合框中,如果组合框未排序,则可以利用组合框索引与String
数组中的索引相同的事实。然后在你的动作监听器中,你得到所选的索引,并以那种方式查找动物。另一个选择是定义自定义Animal
,这超出了本答案的范围(但可以在互联网上获得信息)。ListCellRenderer
/ JComboBox
本身,或将项目复制到临时数组中)等很抱歉,如果这有点模糊,希望它能让你开始走正确的道路。