gpt4 book ai didi

JavaFX 菜单 - 首字母、下划线装饰

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:38 28 4
gpt4 key购买 nike

遵循 UI 标准:如果应用程序菜单项(在顶部菜单栏上)打开一个下拉菜单,它必须被装饰为如下所示:Decorated menu item first letter第一个字母具有“text-decoration:underline”属性。但是根据这个http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html我不能在 javafx 应用程序中那样做。

有什么建议吗?

最佳答案

助记法背景

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

另请注意,在 Windows 上,即使您已按上述方式定义助记符,您也需要按 ALT 键才能在 JavaFX 应用程序中看到带下划线的助记符(这是标准 Windows 应用程序的方式像记事本一样工作,所以 JavaFX 在这方面没有什么不同。

定义助记符

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

任何Labeled (这是每个带有文本的控件)只要您将带标签的项目的助记符解析设置为 true 并在标签文本中放置下划线,就可以潜在地显示助记符并对其使用react。

同时定义加速器

Apple's developer guidelines鼓励在为 OS X 编写应用程序时使用加速器而不是助记符。因此,为了让您的应用程序更好地跨平台工作,我建议为您的菜单项提供加速器,即使您已经拥有在 Windows 下使用的助记符。你可以setAccelerators on menu items在 JavaFX 中。有关在 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 文本支持 -fx-underline指定文本应应用下划线样式。但即便如此,fx-underline 仍将为标签中的所有文本而不是特定字母加下划线,这不是您想要的。

示例应用程序

演示在 JavaFX 应用程序的菜单上使用快捷键和助记符。请注意示例中如何使用 KeyCombination.keyCombination("SHORTCUT+N") 来指定快捷键。这是在 JavaFX 中指定标准操作系统快捷键的独立于操作系统的方法。在 Windows 中,SHORTCUT 将映射到 CTRL。在 OS X 中,SHORTCUT 将映射到 OS X COMMAND 键。

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

New file sample

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);
}
}

关于JavaFX 菜单 - 首字母、下划线装饰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24499500/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com