JavaFX 菜单 - 第一个字母,下划线装饰
遵循 UI 标准:如果应用程序菜单项(位于顶部菜单栏上)打开一个下拉列表,则必须对其进行装饰,因为它显示在:第一个字母具有“text-decoration:下划线”属性。但是考虑到这一 http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html 我不能在javafx应用程序中这样做。
有什么建议吗?
遵循 UI 标准:如果应用程序菜单项(位于顶部菜单栏上)打开一个下拉列表,则必须对其进行装饰,因为它显示在:第一个字母具有“text-decoration:下划线”属性。但是考虑到这一 http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html 我不能在javafx应用程序中这样做。
有什么建议吗?
助记符的背景
您在图像中指向的是键盘助记符。JavaFX 确实支持助记符,但您只能在本机使用助记符的平台上看到它们,并且您已将应用程序编程为使用助记符。例如,Windows 程序通常使用助记符,因此当您在 Windows 上运行 JavaFX 应用程序时,您会在 JavaFX 应用程序中看到助记符,但 OS X 程序通常不使用助记符,因此,如果您在 OS X 上运行 JavaFX 应用程序,则可能不会看到显示助记符。
另请注意,在Windows上,即使您已经定义了如上所述的助记符,您也需要按键才能在JavaFX应用程序中查看带有下划线的助记符(这是记事本等标准Windows应用程序的工作方式,因此JavaFX在这方面没有什么不同)。ALT
定义助记符
在菜单项上将助记符解析设置为 true。(默认情况下,在菜单项上确实如此,但请阅读链接的文档以更好地理解它)。在菜单项文本中,在要用作菜单项的键盘助记符的字母前面放置一个下划线字符。_
任何已标记的内容(即每个带有文本的控件)都可能显示助记符并响应助记符,只要您将标记项的助记符解析设置为 true 并在标签文本中放置下划线即可。
还要定义加速器
Apple的开发人员指南鼓励在为OS X编写应用程序时使用加速器而不是助记符。因此,为了让您的应用程序更好地跨平台工作,我建议为您的菜单项提供加速器,即使您已经有助记符在Windows下使用。您可以在 JavaFX 中的菜单项上设置加速器。有关在 JavaFX 应用程序中使用加速器的更多信息,请参阅使用 JavaFX 2.2 助记符(和加速器)的答案(它实际上演示了加速器的使用而不是助记符的使用...)。
使用 JavaFX CSS 属性,而不是 w3c CSS 属性
第一个字母具有“文本修饰:下划线”属性。
这无关紧要,在 JavaFX 应用程序中也不起作用。JavaFX 支持与 HTML 开发中使用的 w3c CSS 属性不同的 CSS 属性。特别是,JavaFX不支持:文本修饰:下划线
。JavaFX 仅支持 JavaFX CSS 参考指南中定义的 CSS 属性。特别是 JavaFX 文本支持 -fx-下划线
来指定文本应应用下划线样式。但即便如此,还是会给标签中的所有文本加下划线,而不是特定的字母,这不是你想要的。fx-underline
示例应用程序
演示如何在 JavaFX 应用程序中的菜单上使用快捷键和助记符。请注意,在示例中,它如何用于指定加速器快捷方式。这是在 JavaFX 中指定标准操作系统快捷键的一种独立于操作系统的方式。在 Windows 中,SHORTCUT 将映射到 。在OS X中,SHORTCUT将映射到OS X键。KeyCombination.keyCombination("SHORTCUT+N")
CTRLCOMMAND
屏幕截图演示了如何在 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);
}
}