相當令人沮喪,因為我遵循的指導方針和基本教程。我可以將CSS樣式應用于不同的元素,但不能應用于vbox或hbox。
我有以下簡單的應用程序使用FMXL和CSS創建一個簡單的場景:
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("/BingRen.fxml");
loader.setLocation(xmlUrl);
try {
root = loader.load();
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("BingRen.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
使用FXML,只創建一個BordPane和兩個HBox,每個包含一個標簽。幾乎和HellopApp一樣簡單:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.*?>
<BorderPane fx:id="rootBorderPane"
xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="MainControler">
<top>
<HBox>
<Label text="BingRen app" />
</HBox>
</top>
<bottom>
<HBox>
<Label text="Status bar" />
</HBox>
</bottom>
<center>
</center>
</BorderPane>
和CSS來設置一些基本屬性:
.hbox {
-fx-background-color: #00ff00;
-fx-border-color: #00ff00;
-fx-border-width: 2px;
-fx-padding: 10;
-fx-spacing: 8;
}
.label {
-fx-text-fill: #0000ff;
}
標簽正確地變成藍色,但不應用hbox樣式
事實上,這些建議都不起作用。
我試過了:
改變。hbox到。css文件中的Hbox 在css文件中創建一個#allbox并添加FX-id = & quot;allbox & quot和fxml文件 對于每個變化,我改變標簽的顏色,以確保新版本的css被通讀。
標簽總是改變顏色,但我從來沒有在Hboxes得到背景或paddings
為什么你目前的方法失敗了
看看CSS文檔。
對于HBox
樣式類:默認為空
對于標簽
樣式類:標簽
所以不存在像& quot。hbox & quot除非你添加一個,你沒有這樣做。
CSS選擇器和JavaFX的背景
閱讀標題為& quotCSS和JavaFX場景圖& quot:
CSS選擇器用于將樣式與場景圖節點相匹配。這 節點與CSS選擇器的關系如下:
節點的getTypeSelector方法返回一個類似于 CSS類型選擇器。默認情況下,此方法返回的簡單名稱 這個班級。請注意,內部類或 匿名類可能不能用作類型選擇器。在這種情況下, 應該重寫此方法以返回有意義的值。 每個 場景圖中的節點具有styleClass屬性。注意,一個節點 可能有多個樣式類。節點的styleClass是類似的 到class = & quot..."可以出現在HTML元素上的屬性。看見 班級選擇器。 場景圖中的每個節點都有一個id變量 字符串。這類似于id = & quot..."可以出現的屬性 HTML元素。請參見ID選擇器。 應用示例
所以有三種方法可以解決這個問題:
在CSS文件中使用類型選擇器:
HBox { <css rules> }
在CSS文件中應用樣式類:
.my-hbox-styleclass { <css rules> }
在FXML中寫下:
<HBox styleClass="my-hbox-styleclass">
或者在代碼編寫中:
myHBox.getStyleClass().add("my-hbox-styleclass");
在CSS文件中應用樣式id:
#my-hbox-id { <css rules> }
在FXML中寫下:
<HBox id="my-hbox-id">
或者在代碼編寫中:
myHBox.setId("my-hbox-id");
選擇器范圍差異
每種方法的標準應用都有不同的含義:
類型選擇器將應用于用戶界面中的所有HBox類型。 類選擇器將應用于任何應用了給定樣式類的東西。 id選擇器通常用于UI中的單個節點,而不是節點的類型或類。它在FXML文檔或場景圖樹中應該是唯一的,盡管這不是強制的。