Это только произошло бы, если интерпретатор Java производит машинный код, который является на самом деле лучше оптимизирован, чем машинный код, который Ваш компилятор генерирует для кода C++, который Вы пишете, до такой степени, когда код C++ медленнее, чем Java и стоимость интерпретации.
Однако разногласия того фактического случая являются довольно низкими - если, возможно, Java не имеет очень правильно написанную библиотеку, и у Вас есть своя собственная плохо записанная библиотека C++.
Я не думаю, что это возможно с JDialog без его расширения.
Вы можете использовать JOptionPane.showOptionDialog () (или, возможно, один из других методов show), передав вам JButtons. хотите, чтобы их использовали.
Если переданные параметры являются компонентами, они будут отображаться как обычно, поэтому вы можете сделать что-то вроде этого:
int optionType = JOptionPane.DEFAULT_OPTION;
int messageType = JOptionPane.PLAIN_MESSAGE; // no standard icon
JButton ok = new JButton("ok");
JButton cancel = new JButton("cancel");
//add any handlers to the buttons
...
//construct options
Object[] selValues = { ok, cancel };
//show dialog as normal, selected index will be returned.
int res = JOptionPane.showOptionDialog(null, "message",
"title", optionType, messageType, null, selValues,
selValues[0]);
Однострочное решение
t.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke("ESCAPE"), btnCancel.getAction());
, где t - любой компонент (кроме JButton), например JTextField в диалоговом окне.
All you have to do is attach the action listener to the button and call dialog.setVisible(false)
inside of it.