我在JFrame中有两个垂直显示的列表。假设列表A是ArrayList<CustomTexField>
,列表B是ArrayList<JLabel>
。
我想&#34;更新&#34;列表B的元素与列表A中的元素的相同索引与CustomTextField
中的值匹配。
我已尝试添加文档监听器,但不知道如何计算索引。
@Override
public void insertUpdate(DocumentEvent e) {
try {
listB().get(INDEX).setText(e.getDocument().getText(0, e.getDocument().getLength()) + "");
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
我还在CustomTexField
类中创建了一个方法,该方法在创建索引时保存索引但不知道如何阅读&#39;来自e.getDocument()
编辑:更新标题
答案 0 :(得分:1)
如果您只是想在arraylist中获取项目的索引,则可以使用indexOf
方法。
int indexOfItem = arrayList.indexOf(itemIWant)
这就是我如何解释你的问题,但我希望澄清。
编辑:如果您尝试将对象附加到DocumentListener,则可以查看此问题:how to find source component that generated a DocumentEvent
基本上,如果每个CustomTextField都有一个DocumentListener,则可以使用链接中描述的putProperty
方法将自身附加到它上面。从那里,您可以使用getProperty(item)
来查找该项目。如果你愿意,你可以用索引做类似的事情,但我相信由于你在CustomTextField的定义中有一个索引字段,只需将CustomTextField与DocumentListener相连就足够了。
//sometime on initalization of the lists
for(CustomTextField field: listA):
field.getDocument().putProperty("owner", field);
...
@Override
public void insertUpdate(DocumentEvent e) {
try {
CustomTextField field = e.getDocument().getProperty("owner");
int index = field.getIndex(); //assuming you have a getter method
listB().get(index).setText(listA.get(index).getText());
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
答案 1 :(得分:0)
我会将所有CustomTextField
存储在Map<String, Integer>
中,其中密钥是CustomTextField
的名称,值是唯一标识符。然后,我将所有Label
放在另一个Map<Integer, Label>
中,其中密钥是唯一标识符,对应于与CustomTextField
匹配的唯一标识符。
现在,在您的insertUpdate()
中,您知道哪些CustomTextField正在更新,因此请获取它的唯一标识符,如:
int id = ctfMap.get(customTextField.getName());
获取此ID并获取您的标签:
JLabel label = lblMap.get(id);
设置标签文字:
label.setText = customTextField.getText();
答案 2 :(得分:0)
我找到了答案here。我还在CustomTextFields中添加了focusListener
,因此在覆盖focusGained
方法时,我可以获取调用事件的对象,并将其转换为自定义类。
private class ListenForDoc implements DocumentListener, FocusListener{
int index;
@Override
public void insertUpdate(DocumentEvent e) {
try {
listB().get(index).setText(e.getDocument().getText(0, e.getDocument().getLength()));
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
@Override
public void removeUpdate(DocumentEvent e) {
//TO DO
}
@Override
public void changedUpdate(DocumentEvent e) {}
@Override
public void focusGained(FocusEvent e) {
Object o = e.getSource();
if(o instanceof CustomTextField) {
index = ((CustomTextField)o).getIndex();
}
else{
//HandleError
}
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
}