Java 跨平台外观的快捷键绑定&;手感(金属l&f)
我在读关于跨平台的外观和感觉,即金属L&f在所有平台上看起来都一样。我想知道这个l&f的快捷键是什么。我面临的问题是,在MAC操作系统中,如果我必须复制/粘贴,我必须使用窗口快捷键(ctrl+v/c)进行复制/粘贴操作。我无法使用MAC快捷键(cmd+v/c)。我想知道是不是因为l&f。请帮忙,谢谢 是的,外观和感觉可以做到这一点。你可以做的一件事,我希望有人有更好的答案,就是为你想要表现不同的组件设置输入映射。下面是一种将平台默认输入映射用于文本字段的方法Java 跨平台外观的快捷键绑定&;手感(金属l&f),java,macos,swing,look-and-feel,Java,Macos,Swing,Look And Feel,我在读关于跨平台的外观和感觉,即金属L&f在所有平台上看起来都一样。我想知道这个l&f的快捷键是什么。我面临的问题是,在MAC操作系统中,如果我必须复制/粘贴,我必须使用窗口快捷键(ctrl+v/c)进行复制/粘贴操作。我无法使用MAC快捷键(cmd+v/c)。我想知道是不是因为l&f。请帮忙,谢谢 是的,外观和感觉可以做到这一点。你可以做的一件事,我希望有人有更好的答案,就是为你想要表现不同的组件设置输入映射。下面是一种将平台默认输入映射用于文本字段的方法 public static void
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将粘贴
通过OSX上的jdk11进行验证。是的,外观可以做到这一点。你可以做的一件事,我希望有人有更好的答案,就是为你想要表现不同的组件设置输入映射。下面是一种将平台默认输入映射用于文本字段的方法
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将粘贴
通过OSX上的jdk11验证。跨平台PLAF在跨平台使用相同的快捷键是有道理的。如果Windows/*nix机器没有OSX“命令键”,为什么PLAF会尝试使用它?对于Windows,我使用的是Windows\u L&F,对于linux和mac,我使用的是Metal\u L&F。所以你是说,因为Windows上没有cmd键。PLAF正在使用ctrl使其跨平台工作。我看到mac有Aqua_L&F,但我使用的jdk版本有一些问题。这就是我被迫使用金属的原因。有什么建议可以实现这一点吗?跨平台PLAF可以在跨平台使用相同的快捷键。如果Windows/*nix机器没有OSX“命令键”,为什么PLAF会尝试使用它?对于Windows,我使用的是Windows\u L&F,对于linux和mac,我使用的是Metal\u L&F。所以你是说,因为Windows上没有cmd键。PLAF正在使用ctrl使其跨平台工作。我看到mac有Aqua_L&F,但我使用的jdk版本有一些问题。这就是我被迫使用金属的原因。有什么建议吗?在这种方法中,我必须为每个组件设置输入映射。试图避免这种情况。如果我使用aqua l&f,那么默认情况下会启用mac快捷方式吗?我不太了解这一点,因为这是我第一次在mac上测试我的代码。@wazza是的,如果您使用aqua外观,并且觉得不必设置输入映射,那么它应该是默认的(我怀疑它是原生的还是跨柏拉图的)输入映射。为所有组件设置输入映射似乎很麻烦,但我找不到它。你可以在XYZfocusInputMap中循环所有内容,并将它们设置为aqua的默认值,否则可能有人会想出更好的方法。我正在考虑使用mac的默认L&F。你认为这会解决这个问题吗?当然,如果我不设置我的外观,那么cmd+v/cmd+c分别粘贴和复制。@wazza在这种方法中,我必须为每个组件设置输入映射。-正如您在关于这个主题的最后一个问题()中所说的,您不需要为每个组件设置它。更改父输入映射将更改所有实例的输入映射。在这种方法中,我必须为每个组件设置输入映射。试图避免这种情况。如果我使用aqua l&f,那么默认情况下会启用mac快捷方式吗?我不太了解这一点,因为这是我第一次在mac上测试我的代码。@wazza是的,如果您使用aqua外观,并且觉得不必设置输入映射,那么它应该是默认的(我怀疑它是原生的还是跨柏拉图的)输入映射。为所有组件设置输入映射似乎很麻烦,但我找不到它。你可以在XYZfocusInputMap中循环所有内容,并将它们设置为aqua的默认值,否则可能有人会想出更好的方法。我正在考虑使用mac的默认L&F。你认为这会解决这个问题吗?当然,如果我不设置我的外观,那么cmd+v/cmd+c分别粘贴和复制。@wazza在这种方法中,我必须为每个组件设置输入映射。-正如您在关于这个主题的最后一个问题()中所说的,您不需要为每个组件设置它。更改父InputMap将更改所有实例的父InputMap。