我不确定如何问这个问题,而且我敢肯定,对于我遇到的问题,还有其他解决方案,因此,如果有人能指出正确的方向,我将不胜感激。
无论如何,我遇到的问题是我有一个用于填充组合框的String []列表(称为“项目”)。我想使用组合框中的选择来动态更改GUI面板中列出的表单字段。
到目前为止,我的方法还不够动态,因为完成后,我将从组合框中获得近100种可能的选择。到目前为止,我已经在盒子中测试了3个选项,但是将其扩展到100个将涉及很多代码,而且我认为还必须有其他解决方案,对吗?我只是不知道那是什么解决方案。
String[] projects = {"Select a project...", "Option1", "Option2", "Option3"};
String[] Option1= {"phone", "maxphv"};
String[] Option2= {"address1", "address2", "house", "predir", "street", "strtype", "postdir", "apttype", "aptnbr"
, "city", "state", "zip"};
String[] Option3= {"phone"};
ArrayList<String> fieldslist, fieldslbllist;
理想情况下,我想使用从项目String []组合框中选择的项目的名称,并将该名称引用为另一个包含我要在面板中显示的字段的列表的名称。
但是我从阅读其他问题时发现,一旦代码被编译,变量的名称就无关紧要了。
此时,我有一组代码可以清除面板并动态选择字段,但是我仍然必须手动编写100个选项中每个选项的替换代码。我想那并不可怕,但是我认为我可能没有发现更好的方法。
public void resetFields() {
fieldslist.clear();
fieldslbllist.clear();
}
public void setFields() {
if (project.getSelectedIndex() == 0) {
resetFields();
}
else if (project.getSelectedIndex() == 1) {
resetFields();
for (int i = 0; i <= Option1.length; i++) {
fieldslist.add(Option1[i]);
fieldslbllist.add(Option1[i]+"lbl");
}
}
else if (project.getSelectedIndex() == 2) {
resetFields();
for (int i = 0; i <= Option2.length; i++) {
fieldslist.add(Option2[i]);
fieldslbllist.add(Option2[i]+"lbl");
}
}
//... onward to 100
上面只是一个循环,它会在组合框中选择新选项时重置显示,然后循环遍历OptionX String []列表中的选项,并将值添加到Array字段。
这是处理动态UI编码的可行方法吗?并且,有什么方法可以设置它,所以我只需要指定哪些字段属于每个值,然后就不必为setFields()中的每个可能的project.getSelectedIndex()值编写一个部分?
最佳答案
使用CardLayout
(见here)来动态更改表单。鉴于有大量替代方案,请在选择中寻找分层细分,这些分类可能使您可以使用两个相关的控件,如here所示。