【问题标题】:Label Font and Text Fill disabled on Scene builder在场景生成器上禁用标签字体和文本填充
【发布时间】:2019-04-04 09:21:26
【问题描述】:

我对 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>

【问题讨论】:

  • 您是否在标签上设置了自定义样式?请发布完整的 FXML。
  • 不,我不记得设置任何自定义样式。 @sillyfly
  • 你确定这是同一个文件吗?一方面 - 您发布的 FXML 中的标签没有文本。此外 - 如果您不包含 jfoenix 库,是否会发生这种情况?
  • 是的,这是同一个文件。后来我改了文字。是的,即使我没有包含 jfoenix 库,它也会发生。
  • 您能否检查 FXML 是否应用了样式表?转到 Scene Builder 预览菜单,选择 Scene Style Sheets,然后查看在 Remove a Style Sheet 下是否找到列出的任何 CSS。如果是这样,删除它应该可以让您完全控制您的 FXML 样式。

标签: css javafx scenebuilder


【解决方案1】:

将外部 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-&gt;Scene Style Sheets-&gt;Add a Style Sheet... 完成。

一旦应用样式表,一些设置可以被锁定,这意味着该值已经在 css 文件中设置。

场景生成器首选项

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

对于它保存的每个文件:

  • 姓名
  • 路径
  • X、Y、宽度和高度
  • 分隔位置,可见窗格
  • ...
  • 以及添加到 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/...

【讨论】:

    【解决方案2】:

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

    .label {}
    

    保存文件并打开SceneBuilder,转到Preview->Scene Style Sheets->Add A Style Sheet... 选择您的 .css 文件并尝试...

    enter image description here

    【讨论】:

      【解决方案3】:

      如果你去

      'preview' -> 'Themes' 
      

      您可能选择了非特效主题,例如 Gluon Mobile light。 只需选择 Modena,您的所有属性都会再次启用。

      选择一个不会禁用 CSS 操作的主题:

      【讨论】:

        猜你喜欢
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 2020-11-30
        相关资源
        最近更新 更多