2

コンテキスト: モーダル JDialog を作成し、1 つの条件でカスタム ボタンを使用して JOptionPane 機能をほぼ複製しようとしています。UIManager を使用して Windows スタイルを設定したくありません。

問題: JDialog が ESCAPE および ENTER キーに応答しません。オンラインで見つけることができるすべての提案されたソリューション (複数のリスナー ソリューション、デフォルト ボタンの設定など) を試しましたが、機能しません。

クラス全体がhttp://pastebin.com/Kcj82h2iのペーストビンにアップロードされます

拡張 JDialog クラスでの実際のキー設定は、

InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = getRootPane().getActionMap(); 

inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "returnyes");
actionMap.put("returnyes", new ResultYes());

inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "returnno");
actionMap.put("returnno", new ResultNo());

ダイアログは、次のコードで JFrame から呼び出されます。

if (results == 1)
{
    InvoiceLinesTableModel tm = (InvoiceLinesTableModel) tbl_invoiceItems.getModel();
    InvoiceLinesTableRow row = tm.getRow(tbl_invoiceItems.getSelectedRow());
    tm.deleteRow(row);
    tm.fireTableDataChanged();
    StaticFunctions.updateTableRowHeights(tbl_invoiceItems);
}

ヘルプ?

4

1 に答える 1