- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个对象,我用 CSS 对该对象进行样式化。在我的程序中,我想更改样式中的特定元素,例如背景颜色。我遇到的问题是,当我调用 setStyle(-fx-background-color:red) 时,它将覆盖所有样式元素。即使我只是改变背景颜色。
#header {
-fx-background-color: #4d4d4d;
-fx-border-color: #545454;
-fx-border-width: 1px;
-fx-border-style: solid;
}
#header:hover {
-fx-background-color: #9ACD32;
}
最佳答案
您应该使用“查找的颜色”在 CSS 中定义颜色。
参见 JavaFX CSS reference了解详情。
Looked-up Colors
With looked-up colors you can refer to any other color property that is set on the current node or any of its parents. This is a very powerful feature, as it allows a generic palette of colors to be specified on the scene then used thoughout the application. If you want to change one of those palette colors you can do so at any level in the scene tree and it will affect that node and all its decendents. Looked-up colors are not looked up until they are applied, so they are live and react to any style changes that might occur, such as replacing a palette color at runtime with the "style" property on a node.
In the following example, all background color of all buttons uses the looked up color "abc".
.root { abc: #f00 }
.button { -fx-background-color: abc }
示例应用程序
在示例应用中,关键代码是在代码中动态设置查找的颜色值:
headerColorToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
@Override
public void changed(
ObservableValue<? extends Toggle> observableValue,
Toggle oldToggle,
Toggle newToggle
) {
RadioButton radio = (RadioButton) newToggle;
header.setStyle("header-base-color: " + radio.getText());
}
});
连同 header-base-color
颜色的查找 id 在下面的 css 中的定义:
header-color.css
.root {
header-base-color: #4d4d4d;
}
#header {
-fx-background-color: header-base-color;
-fx-border-color: #545454;
-fx-border-width: 1px;
-fx-border-style: solid;
}
#header:hover {
-fx-background-color: #9ACD32;
}
header-color.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?scenebuilder-stylesheet header-color.css?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import java.net.URL?>
<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="-1.0" prefWidth="-1.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="HeaderColorController">
<top>
<HBox fx:id="header" prefHeight="-1.0" prefWidth="-1.0">
<children>
<Label text="A really hard to read label" />
</children>
</HBox>
</top>
<center>
<VBox prefHeight="-1.0" prefWidth="-1.0" spacing="10.0" style="-fx-background-color: azure;">
<children>
<RadioButton mnemonicParsing="false" style="-fx-text-fill: forestgreen;" text="forestgreen">
<toggleGroup>
<ToggleGroup fx:id="headerColorToggleGroup" />
</toggleGroup>
</RadioButton>
<RadioButton mnemonicParsing="false" style="-fx-text-fill: firebrick;" text="firebrick" toggleGroup="$headerColorToggleGroup" />
<RadioButton mnemonicParsing="false" selected="true" style="-fx-text-fill: #4d4d4d;" text="#4d4d4d" toggleGroup="$headerColorToggleGroup" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</center>
<stylesheets>
<URL value="@header-color.css" />
</stylesheets>
</BorderPane>
HeaderColorApp.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class HeaderColorApp extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("header-color.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) { launch(args); }
}
HeaderColorController.java
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.*;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
public class HeaderColorController {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private HBox header;
@FXML
private ToggleGroup headerColorToggleGroup;
@FXML
void initialize() {
assert header != null : "fx:id=\"header\" was not injected: check your FXML file 'header-color.fxml'.";
assert headerColorToggleGroup != null : "fx:id=\"headerColorToggleGroup\" was not injected: check your FXML file 'header-color.fxml'.";
headerColorToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
@Override
public void changed(ObservableValue<? extends Toggle> observableValue, Toggle oldToggle, Toggle newToggle) {
RadioButton radio = (RadioButton) newToggle;
header.setStyle("header-base-color: " + radio.getText());
}
});
}
}
关于javafx - 同时使用 CSS 和 setStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21385117/
我正在尝试移动小部件中的 qx.html.Element。所以我创建了一个监听器来捕捉鼠标按下和一个监听器来捕捉鼠标移动等等。qooxdoo 中的代码 playground 但是当我尝试例如 setS
代码:我在舞台上添加一个按钮: Button btn = new Button("Change size"); 然后设置当前文本颜色: btn.setStyle("-fx-text-fill:red"
我正在使用 QGraphicsProxyWidget 将 QWidget 嵌入到 QGraphicsScene 中。问题在于绘制这些小部件的样式。来自documentation : A top-lev
为了在 JavaFX 中为许多元素设置背景样式,您需要使用 css 文件,或使用 .setStyle。 在我的例子中,我必须从 ComboBox 设置下拉菜单的背景样式,但我必须使用 .setStyl
我有以下代码片段: YUI().use('event', function (Y) { var button = Y.one("#ckbox"); button.ancestor(".
我正在创建一个 JavaFX 应用程序,但我在更改某些组件的背景颜色时遇到了问题。对于按钮,我可以更改它们的背景半径,但不能更改它们的背景颜色。对于 TableView,我也无法更改背景颜色。 这是我
我有一个实现自定义 ProgressBar 的对象。有时我希望小节的轨道为白色,有时我希望它为黑色。我发现可以使用以下命令在我的 .css 文件中为其设置默认值: .my-bar .track {
我有一个对象,我用 CSS 对该对象进行样式化。在我的程序中,我想更改样式中的特定元素,例如背景颜色。我遇到的问题是,当我调用 setStyle(-fx-background-color:red) 时
有一个选项可以绑定(bind) CSS 文件以向 JavaFX 组件添加样式。 但我想在代码中动态更改一些属性。 有一个 setStyle() 方法,但没有足够的文档来使用它。 我想从 setStyl
我在 UIToolBar 中有一个 UIBarButtonItem。我已经设置了这样的代码: UIBarButtonItem *barbutton=[[UIBarButtonItem alloc]in
如何使用 YUI3 的设置样式来设置类似 -webkit-border-radius: 10px; 的东西? 例子: Y.one('#mydiv').setStyle('-webkit-border-
http://i44.tinypic.com/b69h1h.jpg 看看上图,尤其是 Firebug 窗口。 现在看看这里: http://i40.tinypic.com/v2z4up.jpg 有没有
我正在尝试将 setStyle 设置为扩展 dialogFragment 的自定义对话框,构造函数看起来像: MyCustomDialog() { super(); setStyle(STYL
我正在使用 Mapbox-GL 构建 map 网络应用程序。它有很多很酷的功能。我已经按照 Mapbox website 上的示例设置了切换 basemap (即卫星、地形等)的按钮。 . 我遇到的问
在一个组件中,我试图定位一个 dom 节点并更改它的样式,但这不起作用,谁能告诉我我在这里做错了什么? @Input() progress:number = 0; ... ngOnChanges()
我试图在调整页面大小时(或在较小的显示器上打开)时动态调整页面上的某些元素。有一段代码大概是这样的: $('some_id').setStyle({'margin-left':'200px'}); 它
我有一个 MooTools 脚本,它处理带按钮的面板(切换面板内容)。 这是脚本 - 每个按钮都设置相应的面板可见 + 更改其自身的背景: buttons.addEvent('mouseenter',
下面的代码创建了一个QComboBox,并分配了QAbstractTableModel模型。奇怪的是,如果 app.setStyle("cleanlooks") 被注释掉,QCombo 在单击时不会下
我正在尝试使用 setStyle() 方法为我的 PyQt5 应用程序设置自定义样式,但它不起作用。 我也不完全确定应该把它放在哪里。 在我的主要我尝试做: if __name__ == '__mai
有什么方法可以将样式重置为我的 CSS 中的样式吗? 例子: #foo {width: 50px; height: 50px; position: absolute; top: 150px; left
我是一名优秀的程序员,十分优秀!