Да, внешний вид и ощущение могут сделать это. Одна вещь, которую вы можете сделать, и я надеюсь, что у кого-то есть лучший ответ, это установить карту ввода для компонентов, которые вы хотите вести себя по-разному. Вот способ использования карты ввода платформы по умолчанию для текстового поля.
public static void startGui(){
try{
LookAndFeel aqua = UIManager.getLookAndFeel(); //aqua
UIDefaults def = UIManager.getDefaults();
Object b = def.get("TextField.focusInputMap");
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
UIDefaults def2 = UIManager.getDefaults();
def2.put("TextField.focusInputMap", b);
}catch(Exception e){
e.printStackTrace();
}
JFrame frame = new JFrame("title");
JTextField field = new JTextField();
frame.add(field);
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
EventQueue.invokeLater( ()->startGui() );
}
Если вы запустите это, то cmd + v должен вставить, но если вы выделите строку def2.put(...)
, тогда ctrl + v вставит.
Проверено с jdk11 на OSX.