フォーカス処理の見直し
文書入力の際に,フォーカス処理はとても重要で,ウインドウが開いたらすぐに必要な場所に入力できないとかなりストレスがたまる。今まで,気がついたときに色々フォーカス処理(例)を加えてきたのだが,行き当たりばったりで組み込んできたので,どこでどのようなフォーカス処理をしているのか把握できなくなってしまっていた。フォーカスの取り合い?かもしれない動作が見られるようにもなっていたので,フォーカス処理を全部見直しすることにした。フォーカスは Focuser というクラスを使って,必ずここにフォーカス請求するようにリファクタリングした。案の定,不要なフォーカス請求をかなり入れてしまっていることが判明して,すっきりさせることができた。
package open.dolphin.ui;
import java.awt.Component;
import java.awt.KeyboardFocusManager;
import javax.swing.SwingUtilities;
import org.apache.log4j.Logger;
public class Focuser {
private static final Logger logger = Logger.getLogger(Focuser.class);
private static Component component;
public static void requestFocus(Component c) {
component = c;
KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
SwingUtilities.invokeLater(Focuser::request);
}
private static void request() {
boolean result = component.requestFocusInWindow();
logger.info(component.getClass().toString() + ": request focus " + ((result)? "succeeded" : "failed"));
}
}
« JTextComponent の undo | トップページ | BasicInfoInspecter の表示 »
「OpenDolphin」カテゴリの記事
- 運用18年目のまとめ(2026.02.07)
- IME on/off の切換 - その5(2026.01.05)
- IME on/off の切換 - その4(2025.12.23)
- IME on/off の切換 - その3(2025.12.20)
- OpenDolphin: Java 25 / WildFly 38 への移行(2025.11.09)


