JToolTipの表示をウィンドウが非アクティブな場合でも有効にする
Total: 1804
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JToolTip
の表示モードをすべてのウィンドウで有効にする、またはアクティブなウィンドウのみに限定するで切り替えます。
Screenshot
Advertisement
サンプルコード
private static final String TOOLTIP_MODE = "ToolTipManager.enableToolTipMode";
// ...
String allWindows = "allWindows";
JRadioButton radio1 = new JRadioButton(allWindows, Objects.equals(allWindows, mode));
radio1.setToolTipText("ToolTip: " + allWindows);
radio1.addItemListener(e -> UIManager.put(TOOLTIP_MODE, allWindows));
String activeApplication = "activeApplication";
JRadioButton radio2 = new JRadioButton(activeApplication, Objects.equals(activeApplication, mode));
radio2.setToolTipText("ToolTip: " + activeApplication);
radio2.addItemListener(e -> UIManager.put(TOOLTIP_MODE, activeApplication));
View in GitHub: Java, Kotlin解説
allWindows
JFrame
などのウィンドウがアクティブかどうかにかかわらずツールチップ表示は有効- デフォルトはこの
allWindows
でBasicLookAndFeel
などの初期値
activeApplication
JFrame
などのウィンドウがアクティブな場合のみツールチップ表示は有効MetalLookAndFeel
とWindowsLookAndFeel
の初期値
- ツールチップを表示する前に
ToolTipManager#showTipWindow()
メソッド内で毎回UIManager.getString("ToolTipManager.enableToolTipMode")
がactiveApplication
かを確認しているので、値の変更はすぐに有効になる - 文字列が
activeApplication
かを比較しているだけなのでnull
などを設定するとデフォルトのallWindows
になる
// @see javax/swing/ToolTipManager.java
String mode = UIManager.getString("ToolTipManager.enableToolTipMode");
if ("activeApplication".equals(mode)) {
KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
if (kfm.getFocusedWindow() == null) {
return;
}
}