上下文:我正在尝试使用一个条件创建模态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);
}
帮助?
答案 0 :(得分:5)
由于JDialog
是模态的,当窗口变为可见时,对addCustomKeyMaps()
的调用将被阻止。您应该在之前拨打电话setVisible(true)
。