チケット #29438

接続設定ダイアログのESCキーが利かない

登録: 2012-09-03 20:50 最終更新: 2013-05-02 21:15

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
3
解決法:
修正済み

詳細

接続設定一覧ダイアログと接続設定編集ダイアログにおいて、ボタンやテキストボックスがフォーカス状態の場合はESCキーが利かなくなる。

3.2までは利いていた。

添付ファイルリスト

添付ファイルはありません

チケットの履歴 (4 件中 3 件表示)

2012-09-03 20:50 更新者: argius
  • 新しいチケット "接続設定ダイアログのESCキーが利かない" が作成されました
2012-09-03 21:00 更新者: argius
  • 担当者(未割り当て) から argius に更新されました
コメント

3.3で各コンポーネントのイベントクラスの整理を行った際、getInputMapの処理が2種類あったのをまとめてしまった。

子コンポーネントがフォーカスされた場合も対象にするには、"WHEN_ANCESTOR_OF_FOCUSED_COMPONENT"を指定する(デフォルトはWHEN_FOCUSED)。本件の2つのダイアログは、これを指定する必要があった。

JComponent c = ...;
c.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(keyStroke, actionMapKey);

3.3で追加したメソッドを使う場合に、オプション指定できるようにすれば良いが、APIの修正は見送りとする。

2012-09-06 23:32 更新者: argius
  • 解決法なし から 後で に更新されました
コメント

パッチ

Index: src/net/argius/stew/ui/window/ConnectorMapEditDialog.java
===================================================================
--- src/net/argius/stew/ui/window/ConnectorMapEditDialog.java	(revision 283)
+++ src/net/argius/stew/ui/window/ConnectorMapEditDialog.java	(working copy)
@@ -110,7 +110,9 @@
         p.c.fill = GridBagConstraints.NONE;
         p.addComponent(p2, false);
         // [イベントの設定]
-        ActionUtility.bindAction(rootPane, this, cmdCancel, getKeyStroke(VK_ESCAPE, 0));
+        final KeyStroke ksESC = getKeyStroke(VK_ESCAPE, 0);
+        ActionUtility.bindAction(rootPane, this, cmdCancel, ksESC);
+        rootPane.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ksESC, cmdCancel);
         addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
Index: src/net/argius/stew/ui/window/ConnectorEditDialog.java
===================================================================
--- src/net/argius/stew/ui/window/ConnectorEditDialog.java	(revision 269)
+++ src/net/argius/stew/ui/window/ConnectorEditDialog.java	(working copy)
@@ -149,7 +149,9 @@
         p.c.anchor = GridBagConstraints.CENTER;
         p.addComponent(p2, false);
         pack();
-        ActionUtility.bindAction(rootPane, this, cmdCancel, KeyStroke.getKeyStroke(VK_ESCAPE, 0));
+        final KeyStroke ksESC = KeyStroke.getKeyStroke(VK_ESCAPE, 0);
+        ActionUtility.bindAction(rootPane, this, cmdCancel, ksESC);
+        rootPane.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ksESC, cmdCancel);
         addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {

2013-05-02 21:15 更新者: argius
  • チケット完了時刻2013-05-02 21:15 に更新されました
  • 状況オープン から 完了 に更新されました
  • 解決法後で から 修正済み に更新されました
コメント

バージョン4では修正されているので、クローズとする。

どうしてもバージョン3.3.0を使いたい場合は、パッチを充てて使ってください。ごめんなさい。

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする