プログラムでいくつかの JFormattedTextFields を利用しています。何らかの理由で、テキスト フィールドをクリックした後にテキスト フィールドがフォーカスされると、キャレットの位置が常に左 (位置 0) にジャンプします。ユーザーがクリックした場所にキャレットを配置したいと思います。したがって、2 つの数字の間をクリックすると、キャレットがその 2 つの数字の間に配置されるはずです。
そこで、クリック位置を取得してそこにキャレット位置を設定する FocusListener を実装しました。
FocusListener focusListener = new FocusListener(){
public void focusGained(FocusEvent evt) {
JFormettedTextField jftf = (JFormattedTextField) evt.getSource();
//This is where the caret needs to be.
int dot = jftf.getCaret().getDot();
SwingUtilities.invokeLater( new Runnable() {
public void run() {
'the textField that has focus'.setCaretPosition('Some how get the evt or dot');
}
});
}
public void focusLost (FocusEvent evt) {}
});
私は彼を働かせるために多くのことを試みました。final キーワードを使用してみましたが、これは機能しますが、単一のテキストフィールドに対してのみです。
フォーカス リスナー内で set/get メソッドを使用して現在のオブジェクトを割り当てましたが、これを "安全" にする方法がわかりません (たとえば、同期する必要がありますか?)。
多分私が見逃しているものがありますか?