gpt4 book ai didi

java - 跟踪文档位置变化

转载 作者:行者123 更新时间:2023-12-01 12:47:56 25 4
gpt4 key购买 nike

我正在使用Document方法createPositionPositions 添加到数组中。这些位置根据用户插入/删除行而变化。

如何 Hook 数组中的更改?我需要知道新值以及它所改变的值。

最佳答案

Position接口(interface)没有添加监听器来监听位置变化的方法。因此,您需要使用 Position 对象的包装器手动执行此操作。

public class PositionHolder {
private int oldPosition;
private Position position;
private PropertyChangeSupport propertySupport = new PropertyChangeSupport(this);
public PositionHolder(Position aPos) {
position = aPos;
oldPosition = aPos.getOffset();
}
public void addPropertyChangeListener(PropertyChangeListener aListener) {
propertySupport.addPropertyChangeListener(aListener);
}
// same for remove listener
public void verifyPosition() {
// no custom if statement required - event is fiered only when old != new
propertySupport.firePropertyChangeEvent("position", oldPosition, position.getOffset());
oldPosition = position.getOffset();
}
public Position getPosition() {
return position;
}
}

public class PositionUpdater implements DocumentListener {
private List<PositionHolder> holders;
public PositionUpdater(List<PositionHolder> someHolders) {
holders = someHolders;
}

public void insertUpdate(DocumentEvent e) {
for (PositionHolder h : holders) {
h.verifyPosition();
}
}
public void removeUpdate(DocumentEvent e) {
insertUpdate(e);
}
public void changeUpdate(DocumentEvent e) {
insertUpdate(e);
}
}

JTextComponent textComp = // your text component
List<PositionHolder> holderList = new ArrayList<>(); // your list of positions
textComp.getDocument().addDocumentListener(new PositionUpdater(holderList));

现在,当职位发生变化时,您会收到通知。您只需使用您的位置的包装器填充 holderList 并在这些包装器上注册您的事件监听器。

关于java - 跟踪文档位置变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24506561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com