JTextPane に問題があるようです。JTextPane のアイコン機能が目的に合わないため、JTextPane を拡張して浮動イメージをレンダリングしました。ユーザーが画像をクリックして、特定のイベントを実行できるようにしたい。ただし、画像をクリックすると、evt.consume() を使用しても、キャレットと選択が JTextPane で更新されます。画像と相互作用する一般的なクリックとマウスイベントが、キャレットの位置や選択にまったく影響を与えないようにしたいと思います。関連コード:
public class JTextPaneImg extends JTextPane {
public JTextPaneImg(){
super();
addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
formMousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
formMouseReleased(evt);
}
});
}
private void formMousePressed(java.awt.event.MouseEvent evt) {
if (imgBound.contains(evt.getPoint())) {
evt.consume();
//Do some stuff in here to interact with the image
// but the event still undesirably interacts with selection/caret
}
}
private void formMouseReleased(java.awt.event.MouseEvent evt) {
if (imgBound.contains(evt.getPoint())) {
evt.consume();
//Do some stuff in here to interact with the image
// but the event still undesirably interacts with selection/caret
}
}
}
私は getMouseListeners を呼び出して、自分のマウス リスナーが配列の最後であることを確認しました。リスナーは最大インデックスから最小インデックスの順に呼び出されることを読みました。マウスクリックイベントがまだキャレットを更新しているのはなぜですか? これはルック アンド フィールの問題ですか?