通常,当您在文本组件中双击时,将选择整个单词。
我想禁用这个单词的选择,但仍然保持点击和拖动选择它的能力。
示例:“快速的棕色狐狸跳过懒狗”
当我点击并从“狗”的开头拖动到“狗”的结尾时,文本被选中。但是,当我双击“棕色”时,未选择“棕色”并且可以执行不同的操作。
有谁知道我怎么做到这一点?
答案 0 :(得分:2)
我想您可以注册自己的MouseListener
或MouseAdapter
并检查MouseEvent
的点击次数(即getClickCount()
)。如果它等于2
,则吞下事件,否则将事件处理委托给超类(例如super.mouseClicked(...)
)。
答案 1 :(得分:2)
编辑是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);
答案 2 :(得分:1)
另一种方法是用无效的动作替换selectWord动作:
textComponent.getActionMap().put(DefaultEditorKit.selectWordAction,
new TextAction(DefaultEditorKit.selectWordAction) {
public void actionPerformed(ActionEvent e) {
// DO NOTHING
}
});
如果单词的定义与默认的Swing不同,您也可以使用此技术更改selectWord操作的行为。
答案 3 :(得分:0)
你可以像这样实现双击:
setCaretPosition(0);
Documentation:这指向弃用方法select(int,int)
,该方法是setCaretPosition
的委托调用,然后是moveCaretPosition
答案 4 :(得分:0)
@Loic你的回答对我有用。 但是,如果满足某个条件,我仍然希望启用单词选择。我是这样做的:
var $doc = $(document),
$win = $(window),
$svg = $('svg').drawsvg(),
max = $doc.height() - $win.height();
$win.on('scroll', function() {
var p = $win.scrollTop() / max;
$svg.drawsvg('progress', p);
});