Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跨平台外观的快捷键绑定&;手感(金属l&f)_Java_Macos_Swing_Look And Feel - Fatal编程技术网

Java 跨平台外观的快捷键绑定&;手感(金属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

我在读关于跨平台的外观和感觉,即金属L&f在所有平台上看起来都一样。我想知道这个l&f的快捷键是什么。我面临的问题是,在MAC操作系统中,如果我必须复制/粘贴,我必须使用窗口快捷键(ctrl+v/c)进行复制/粘贴操作。我无法使用MAC快捷键(cmd+v/c)。我想知道是不是因为l&f。请帮忙,谢谢

是的,外观和感觉可以做到这一点。你可以做的一件事,我希望有人有更好的答案,就是为你想要表现不同的组件设置输入映射。下面是一种将平台默认输入映射用于文本字段的方法

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。