无法设置水平盒子或垂直盒子的样式
P粉773659687
P粉773659687 2023-09-03 10:20:53
[CSS3讨论组]
<p>非常令人沮丧,因为我遵循指南和基本教程。我可以将 CSS 样式应用于不同的元素,但不能应用于 vbox 或 hbox。</p> <p>我有以下简单的应用程序,使用 FMXL 和 CSS 创建一个简单的场景:</p> <pre class="brush:php;toolbar:false;">import java.net.URL; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Parent; import javafx.scene.Scene; public class BingRen extends Application { @Override public void start(Stage primaryStage) { Parent root = null; FXMLLoader loader = new FXMLLoader(); URL xmlUrl = getClass().getResource(&quot;/BingRen.fxml&quot;); loader.setLocation(xmlUrl); try { root = loader.load(); Scene scene = new Scene(root,400,400); scene.getStylesheets().add(getClass().getResource(&quot;BingRen.css&quot;).toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } }</pre> <p>使用 FXML,仅创建一个 BordPane 和 2 个 HBox,各包含一个标签。几乎和 HellopApp 一样简单:</p> <pre class="brush:php;toolbar:false;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;?import java.lang.*?&gt; &lt;?import java.util.*?&gt; &lt;?import javafx.scene.*?&gt; &lt;?import javafx.scene.control.*?&gt; &lt;?import javafx.scene.layout.*?&gt; &lt;?import javafx.geometry.*?&gt; &lt;BorderPane fx:id=&quot;rootBorderPane&quot; xmlns=&quot;http://javafx.com/javafx&quot; xmlns:fx=&quot;http://javafx.com/fxml&quot; fx:controller=&quot;MainControler&quot;&gt; &lt;top&gt; &lt;HBox&gt; &lt;Label text=&quot;BingRen app&quot; /&gt; &lt;/HBox&gt; &lt;/top&gt; &lt;bottom&gt; &lt;HBox&gt; &lt;Label text=&quot;Status bar&quot; /&gt; &lt;/HBox&gt; &lt;/bottom&gt; &lt;center&gt; &lt;/center&gt; &lt;/BorderPane&gt;</pre> <p>还有CSS来设置一些基本属性:</p> <pre class="brush:php;toolbar:false;">.hbox { -fx-background-color: #00ff00; -fx-border-color: #00ff00; -fx-border-width: 2px; -fx-padding: 10; -fx-spacing: 8; } .label { -fx-text-fill: #0000ff; }</pre> <p>标签正确变为蓝色,但未应用 hbox 样式</p> <hr /> <p>事实上,这些建议都不起作用。</p> <p>我尝试过:</p> <ul> <li>将 css 文件中的 .hbox 更改为 .Hbox</li> <li>在css文件中创建#allbox并添加fx-id="allbox"和fxml文件</li> </ul> <p>对于每次更改,我都会更改标签的颜色,以确保新版本的 CSS 能够被读取。</p> <p>标签总是改变颜色,但我从来没有在水平盒中得到背景或填充</p>
P粉773659687
P粉773659687

全部回复(1)
P粉041881924

为什么您当前的方法失败了

查看CSS 文档一个>.

对于HBox

对于标签

因此,HBox 不存在“.hbox”这样的样式类,除非您添加了一个样式类,但您还没有这样做。

CSS 选择器和 JavaFX 背景

阅读标题为 " 的部分CSS 和 JavaFX 场景图”

应用示例

因此,您可以通过三种方法解决此问题:

  1. 在 CSS 文件中使用类型选择器

    HBox { <css rules> }
  2. 在 CSS 文件中应用样式类

    .my-hbox-styleclass { <css rules> }

    并在 FXML 中写入:

    <HBox styleClass="my-hbox-styleclass">

    或者在代码中写入:

    myHBox.getStyleClass().add("my-hbox-styleclass");
  3. 在 CSS 文件中应用样式 ID

    #my-hbox-id { <css rules> }

    并在 FXML 中写入:

    <HBox id="my-hbox-id">

    或者在代码中写入:

    myHBox.setId("my-hbox-id");

选择器范围差异

每种方法的标准应用的含义有所不同:

  1. 类型选择器将应用于用户界面中的所有 HBox 类型。
  2. 类选择器将应用于应用了给定样式类的任何内容。
  3. id 选择器通常用于 UI 中的单个节点,而不是节点的类型或类。它在 FXML 文档或场景图树中应该是唯一的,尽管这不是强制的。
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号