编程语言
首页 > 编程语言> > JavaFX菜单 – 首字母,下划线装饰

JavaFX菜单 – 首字母,下划线装饰

作者:互联网

遵循UI标准:
如果应用程序菜单项(在顶部菜单栏上)打开一个下拉列表,它必须按照下面的显示进行装饰:
第一个字母有“text-decoration:underline”属性.
但是要适应这个http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html
我不能在javafx应用程序中这样做.

有什么建议么?

解决方法:

关于助记符的背景

您在映像中指出的是keyboard mnemonic.JavaFX确实支持助记符,但您只能在本机使用助记符的平台上以及编程应用程序以使用助记符的平台上看到它们.例如,Windows程序通常使用助记符,因此当您在Windows上运行应用程序时,您将看到JavaFX应用程序中的助记符,但OS X程序通常不使用助记符,因此如果您在OS X上运行JavaFX应用程序,您可能看不到显示助记符.

另请注意,在Windows上,即使您已按上述方法定义了助记符,也需要按ALT键以查看JavaFX应用程序中带下划线的助记符(这就是Notepad等标准Windows应用程序的工作原理,因此JavaFX不是在这方面不同).

定义你的助记符

在菜单项上将mnemonic parsing设置为true. (默认情况下,菜单项实际上是正确的,但阅读链接的文档以更好地理解它).
在菜单项文本中,在要用作菜单项的键盘助记符的字母前面放置一个下划线字符_.

只要您将标签项的助记符解析设置为true并在标签文本中放置下划线,任何Labeled(每个控件都带有文本)都可能显示并响应助记符.

还定义加速器

Apple’s developer guidelines鼓励在为OS X编写应用程序时使用加速器而不是助记符.因此,为了让您的应用程序更好地跨平台工作,我建议为您的菜单项提供加速器,即使您已经在Windows下使用助记符.你可以在JavaFX中使用setAccelerators on menu items.有关在JavaFX应用程序中使用加速器的更多信息,请参阅Using JavaFX 2.2 Mnemonic (and accelerators)的答案(实际上演示了加速器使用而不是使用助记符……).

使用JavaFX CSS属性,而不是w3c CSS属性

The first letter has “text-decoration:underline” property.

这是无关紧要的,不适用于JavaFX应用程序. JavaFX支持与HTML开发中使用的w3c CSS属性不同的CSS属性.特别是,JavaFX不支持:text-decoration:underline.JavaFX仅支持JavaFX CSS reference guide中定义的CSS属性.特别是JavaFX Text支持-fx-underline指定文本应该应用下划线样式.但即使这样,fx-underline也会强调标签中的所有文字而不是特定的字母,这不是你想要的.

样品申请

演示在JavaFX应用程序中的菜单上使用加速器和助记符.注意在示例中,它使用KeyCombination.keyCombination(“SHORTCUT N”)来指定加速器快捷方式.这是一种在OSFX中指定标准OS快捷键的独立于操作系统的方法.在Windows中,SHORTCUT将映射到CTRL.在OS X中,SHORTCUT将映射到OS X COMMAND键.

屏幕截图演示了在Windows 7上运行应用程序并按ALT键以显示助记符.

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MnemonicAcceleratedMenu extends Application {
    @Override
    public void start(Stage stage) {
        Menu fileMenu = new Menu("_File");
        MenuItem newFileMenuItem = new MenuItem("_New...");
        newFileMenuItem.setAccelerator(
            KeyCombination.keyCombination("SHORTCUT+N")
        );
        newFileMenuItem.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Something new, this way comes");
            }
        });
        fileMenu.getItems().add(
                newFileMenuItem
        );

        MenuBar menuBar = new MenuBar();
        menuBar.getMenus().setAll(
                fileMenu
        );

        VBox layout = new VBox(menuBar);
        layout.setPrefSize(200, 100);

        stage.setScene(new Scene(layout));
        stage.show();
    }

   public static void main(String[] args) {
        launch(args);
    }
}

标签:java,javafx,standards
来源: https://codeday.me/bug/20191005/1855206.html