如何在动态生成时将 JcheckBoxes link 转换为 JtextFields?
How to link JcheckBoxes to JtextFields when they are being dynamically generated?
我希望我的应用程序根据始终变化的输入创建 jcheckboxes。
我想在每个复选框附近创建一个 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
}
当我以动态方式访问复选框时,我无法访问第二个文本字段数组。
有什么方法可以 link 他们,或者任何其他想法吗?
谢谢
戴夫。
您可以使用 Map
(Hashmap),复选框将是键,textField 是执行键循环时返回的值。
您可以做的一件事是使用 Component 的 setName 和 getName 方法来保存 JCheckBox 的索引。
projectPanels[i].setName(Integer.toString(i));
然后,在你的状态下改变监听器。
int i = Integer.valueOf(e.getName());
这为您提供了 JTextField 的索引。
我希望我的应用程序根据始终变化的输入创建 jcheckboxes。 我想在每个复选框附近创建一个 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
}
当我以动态方式访问复选框时,我无法访问第二个文本字段数组。 有什么方法可以 link 他们,或者任何其他想法吗?
谢谢
戴夫。
您可以使用 Map
(Hashmap),复选框将是键,textField 是执行键循环时返回的值。
您可以做的一件事是使用 Component 的 setName 和 getName 方法来保存 JCheckBox 的索引。
projectPanels[i].setName(Integer.toString(i));
然后,在你的状态下改变监听器。
int i = Integer.valueOf(e.getName());
这为您提供了 JTextField 的索引。