如何动态生成JcheckBoxes和JtextFields?

时间:2015-01-18 16:19:48

标签: java swing actionlistener jtextfield jcheckbox

我希望我的应用程序从始终更改的输入创建jcheckbox。 我想在每个复选框附近创建一个jtextfield,只有在按下他的复选框时才会启用它。

我设法创建了这段代码:

 //Create checkboxes with textfileds
    for (int i = 0; i < activeProjects.length; i++) {
        projectPanels[i] = new JCheckBox(activeProjects[i]);
        projectPanels[i].setSelected(false);
        projectPanels[i].setComponentOrientation   (ComponentOrientation.RIGHT_TO_LEFT);
        projectPanels[i].setAlignmentX(RIGHT_ALIGNMENT);
        projectPanels[i].addItemListener(this);

        projectStorageNum[i] = new JTextField("");
//          projectStorageNum[i].setEnabled(false);
        projectStorageNum[i].setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        projectStorageNum[i].setMaximumSize(new Dimension(200,30));
        projectStorageNum[i].setMinimumSize(new Dimension(200,30));
        projectStorageNum[i].setPreferredSize(new Dimension(200,30));
        projectStorageNum[i].setAlignmentX(RIGHT_ALIGNMENT);

        tmppnl = new JPanel();
        tmppnl.add(projectStorageNum[i]);
        tmppnl.add(projectPanels[i]);

        checkBoxPanel.add(tmppnl);

    }

这是我的州改变听众:

public void itemStateChanged(ItemEvent e) {
Object source = e.getItemSelectable();
JCheckBox myBox= (JCheckBox)source;
String bName = myBox.getText();

if (e.getStateChange() == ItemEvent.SELECTED)
{
// enable matching text field.
// add bName to projects list.
}
    else
    {
     //disable matching textfield
     // remove bName from list
    }

当我以动态方式访问复选框时,我无法访问第二个文本字段数组。 有没有办法将它们或任何其他想法联系起来?

感谢

戴夫。

2 个答案:

答案 0 :(得分:1)

您可以使用Map(Hashmap)复选框作为键,textField表示执行键循环时返回的值。

答案 1 :(得分:1)

您可以做的一件事是使用Component的setName和getName方法来保存JCheckBox的索引。

projectPanels[i].setName(Integer.toString(i));

然后,在你的状态改变监听器。

int i = Integer.valueOf(e.getName());

这为您提供了JTextField的索引。