css - 设置菜单项css字体样式没有可见效果
问题描述
当用户单击它时,我想将 MenuItem 的文本更改为粗体。为了设法做到这一点,我正在使用setStyle
,但不幸的是它没有明显的效果。当用户选择 MenuItem 选项时,css 不起作用。css 样式仅在初始化方法中有效。
我为该问题创建了一个最小的可重现示例:
主要的:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public final class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("MainView.fxml"));
Scene scene = new Scene(root, 850.0, 650.0);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
主要 FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane prefHeight="475.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="MainController">
<top>
<MenuBar BorderPane.alignment="CENTER">
<menus>
<Menu fx:id="menu" mnemonicParsing="false" text="Switch Chart">
<items>
<MenuItem text="MenuItem1" />
<MenuItem onAction="#setFontBold" text="MenuItem2" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
</BorderPane>
主控制器:
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
public class MainController implements Initializable {
@FXML private Menu menu;
private List<MenuItem> menuItems;
@Override
public void initialize(URL location, ResourceBundle resources) {
menuItems = menu.getItems();
menuItems.get(0).setStyle("-fx-font-weight: bold");
}
public void setFontBold() {
menuItems.get(1).setStyle("-fx-font-weight: bold");
System.out.println(menuItems.get(1).getStyle());
System.out.println("Font set to bold in menuitem with index 1 has no effect...");
}
}
因此,即使在选择了第一个索引菜单项之后,我也得到了以下 css 效果(所以 onAction=#setFontBold 不会在视觉上改变任何东西)。
没有大胆的效果。- 仅当您在 initialize() 中设置样式时
我很好奇为什么它没有区别?它确实将样式设置为粗体,但即使将其更改为粗体,它也会显示为常规字体。
编辑: JavaFX 版本:8.0.211-b10
解决方案
如果我必须坚持使用 javafx 8 并且需要切换,我会使用 RadioMenuItem。它按预期完成工作,但不会使 MenuItem 文本变为粗体。
从官方文档中,我发现以下摘录很有用。
ToggleGroup toggleGroup = new ToggleGroup();
RadioMenuItem radioItem1 = new RadioMenuItem("Option 1");
radioItem.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
System.out.println("radio toggled");
}
});
radioItem1.setToggleGroup(toggleGroup);
RadioMenuItem radioItem2 = new RadioMenuItem("Option 2");
radioItem.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
System.out.println("radio toggled");
}
});
radioItem2.setToggleGroup(toggleGroup);
推荐阅读
- angular - iOS WKWebview 上的 Ionic 3 i18n 翻译
- c++ - C ++:将一行读为:'string string;int'
- formatjs - 如何将 format.js 与 node.js 一起使用
- excel - 如何使用 SUMPRODUCT 和 MAX 函数对多张工作表上的数据求和?
- javascript - 如何以角度触发主机组件上的动画?
- git - 我可以创建一个从开源存储库克隆的存储库,并且仍然能够将他们的新更新合并到我的存储库中吗?
- java - 以编程方式创建的下划线微调器
- css - 静态 CSS 文件不适用于路由器 Express
- android - Android:从在活动上扩展的 AbstractActivity 类调用变量时出现问题
- sql - 如何比较两个表?