2

上下文:我正在尝试创建模态 JDialog 并在一个条件下使用自定义按钮几乎复制 JOptionPane 功能 - 我不想使用 UIManager 来设置窗口样式。

问题:JDialog 没有像它应该的那样回答 ESCAPE 和 ENTER 键。我已经尝试了我可以在网上找到的所有建议的解决方案(多个听众解决方案、设置默认按钮等),但我无法让它工作。

全班上传到http://pastebin.com/Kcj82h2i的 pastebin

扩展 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

5

由于是模态的,当窗口变得可见时,JDialog调用将被阻止。addCustomKeyMaps()你应该在打电话之前打这个电话setVisible(true)

于 2013-02-02T18:45:17.213 回答