场景构建器上禁用标签字体和文本填充

Label Font and Text Fill disabled on Scene builder

我对 Scene Builder 和 JavaFXML 还很陌生。当我将标签添加到我的锚定窗格时,我无法更改文本的字体和颜色。这两个选项都变灰了,旁边有这个 CSS 标题。 我怎样才能不禁用这些选项?按钮也是如此。

FXML 文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import com.jfoenix.controls.JFXButton?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>


<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="672.0" prefWidth="176.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <AnchorPane prefHeight="188.0" prefWidth="176.0" style="-fx-background-color: #1c94d900;">
         <children>
            <Label fx:id="StudentUSN" layoutX="15.0" layoutY="145.0" prefHeight="24.0" prefWidth="146.0" />
         </children>
      </AnchorPane>
      <VBox prefHeight="464.0" prefWidth="176.0">
         <children>
            <JFXButton fx:id="b1" prefHeight="44.0" prefWidth="176.0" style="-fx-background-color: #1156cf;" text="Attendance" />
            <JFXButton fx:id="b2" disable="true" prefHeight="44.0" prefWidth="176.0" style="-fx-background-color: #1156cf;" text="Clubs" />
            <JFXButton fx:id="b3" disable="true" prefHeight="48.0" prefWidth="176.0" style="-fx-background-color: #1156cf;" text="Results" />
            <JFXButton fx:id="b4" disable="true" prefHeight="48.0" prefWidth="176.0" style="-fx-background-color: #1156cf;" text="Feedback" />
         </children>
      </VBox>
   </children>
</VBox>

将外部 CSS 应用于 FXML

给定简单测试:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
   <children>
      <Label layoutX="448.0" layoutY="49.0" text="Label" />
   </children>
</AnchorPane>

和一个单独的 css 文件:

.label {
    -fx-font-family: Roboto;
    -fx-text-fill: grey;
}

无需在 FXML 文件中捆绑 CSS 文件,您可以将其添加到 Scene Builder,因此它会将样式应用于预览。

这可以从 Preview->Scene Style Sheets->Add a Style Sheet... 完成。

应用样式 sheet 后,可以锁定某些设置,这意味着该值已在 css 文件中设置。

Scene Builder 首选项

Scene Builder 有一个内部首选项系统,可以跟踪最近使用的 FXML 文件的不同设置。

对于它保存的每个文件:

  • 姓名
  • 路径
  • X、Y、宽度和高度
  • 分隔线位置,可见窗格
  • ...
  • 并将外部样式 sheets 文件添加到 FXML 文件。

这意味着如果您关闭 Scene Builder,几天后您回来打开同一个 FXML 文件时,所有这些首选项都将恢复并应用。

在 OP 发布的案例中,由于某些未知原因,删除了 css 文件,但仍然应用了锁定。

所以这种情况下的快速修复只是编辑首选项文件,并删除文档条目。它的所有设置都将丢失,但那里没有真正重要的东西。

正在查找首选项文件

在 Mac,可以在此处找到该文件:

/Users/<user>/Library/Preferences/com.oracle.javafx.plist

可以用Xcode编辑。

在 Windows 上,可以在注册表中的此项找到首选项:

HKEY_CURRENT_USER\Software\JavaSoft\Prefs\com\oracle\javafx

并且可以用Regedit编辑。

在 Linux(可能)

${user.home}/.java/.userPrefs/...

创建一个 css 文件并添加此样式:

.label {}

保存文件并打开 SceneBuilder,转到预览-> 场景样式 Sheets-> 添加样式 Sheet... Select 你的 .css 文件并尝试...

enter image description here

如果你去

'preview' -> 'Themes' 

您可能 select 编辑了一个非 fx 主题,例如 Gluon Mobile light。 只需 select 摩德纳,您的所有属性将再次启用。

Select 不禁用 CSS 操作的主题: