通常,当您双击文本组件时,整个单词都会被选中。
我想禁用此单个单词的选择,但仍保持单击和拖动以选择它的能力。
例如:“敏捷的棕色狐狸跳过懒狗”
当我从" the“的开头单击并拖动到"dog”的结尾时,文本被选中。但是,当我双击"brown“时,"brown”没有被选中,并且可以执行不同的操作。
有人知道我是如何做到这一点的吗?
发布于 2012-02-29 14:05:27
其中edit是JTextComponent实例
DefaultCaret c=new DefaultCaret() {
public void mouseClicked(MouseEvent e) {
int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
if (! e.isConsumed() &&
SwingUtilities.isLeftMouseButton(e) &&
nclicks == 2
&& SwingUtilities2.canEventAccessSystemClipboard(e)) {
return;
}
super.mouseClicked(e);
}
public void mousePressed(MouseEvent e) {
int nclicks = SwingUtilities2.getAdjustedClickCount(getComponent(), e);
if (! e.isConsumed() &&
SwingUtilities.isLeftMouseButton(e) &&
nclicks == 2
&& SwingUtilities2.canEventAccessSystemClipboard(e)) {
return;
}
super.mousePressed(e);
}
};
c.setBlinkRate(edit.getCaret().getBlinkRate());
edit.setCaret(c);
发布于 2012-02-29 01:23:53
我想你可以注册你自己的MouseListener
或MouseAdapter
,并检查MouseEvent
的点击量(即getClickCount()
)。如果它等于2
,则接受事件,否则将事件处理委托给超类(例如super.mouseClicked(...)
)。
发布于 2014-11-01 01:32:57
另一种方法是将selectWord操作替换为不执行任何操作的操作:
textComponent.getActionMap().put(DefaultEditorKit.selectWordAction,
new TextAction(DefaultEditorKit.selectWordAction) {
public void actionPerformed(ActionEvent e) {
// DO NOTHING
}
});
如果您对单词的定义不同于默认的Swing定义,您还可以使用此技术来更改selectWord操作的行为。
https://stackoverflow.com/questions/9486631
复制相似问题