fxml设置背景_JavaFX – 如何获取Tab,Button等的背景颜色
問題描述:我無法在JavaFX中獲得對象的背景.我不是指形狀,而是像Buttons,Tabs等常規節點.我不知道如何訪問他們的背景顏色.
我想要的是?我正在開發IDE,我想在選項卡上運行Color動畫,文件是用戶想要打開的,并且已經存在于程序文件集合中.在做這個動畫之前,我想閱讀原始標簽背景顏色,并在動畫結束時將顏色返回到標簽.此外,我想回到懸停和選定的屬性,當我在動畫中設置一些顏色并且它們永遠不會回來時它會消失.我在CSS文件中設置的所有顏色,我不想更改它.
我的問題:如何以編程方式獲取和設置節點顏色?或者如何使用保存原始屬性進行顏色動畫,并在動畫結束時獲取此屬性?
一個簡短的例子:
sample.fxml
styles.css的
.tab{
-fx-background-color: pink;}
.tab:hover{
-fx-background-color: red;}
.tab:selected{
-fx-background-color: yellow;}
解決方法:
據我所知,公共API中沒有辦法確定當前用作區域(包括控件)的背景顏色(除非你知道它是由內聯樣式設置的,在這種情況下)你可以解析getStyle()的結果或通過調用setBackground(…)來解析.但我認為沒理由你會想要這個;如果刪除任何內聯樣式或背景屬性,顏色將恢復為css文件中定義的顏色.
這是一個簡單的示例,其中背景顏色由線性漸變(通過內聯樣式)設置,隨著任務的進行滑動:
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.IntegerBinding;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ColoredTabDemo extends Application {
private int tabCount ;
@Override
public void start(Stage primaryStage) {
TabPane tabPane = new TabPane();
for (int i = 0; i < 4; i++) {
tabPane.getTabs().add(createTab());
}
Scene scene = new Scene(tabPane, 600, 400);
scene.getStylesheets().add("colored-tab-demo.css");
primaryStage.setScene(scene);
primaryStage.show();
}
private Tab createTab() {
Tab tab = new Tab("Tab "+(++tabCount));
Button button = new Button("Load file...");
button.setOnAction(e -> {
Task task = new Task() {
@Override
public Void call() throws Exception {
// simulate loading:
for (int i=1; i <= 500; i++) {
updateProgress(i, 500);
Thread.sleep(20);
}
return null ;
}
};
IntegerBinding progressAsPercent = Bindings.createIntegerBinding(() ->
(int) (task.getProgress() * 100), task.progressProperty());
tab.styleProperty().bind(Bindings.format("-fx-background-color: "
+ "linear-gradient(to right, -fx-accent 0%%, -fx-accent %d%%, -fx-background %1$d%%, -fx-background 100%%);",
progressAsPercent));
button.setDisable(true);
task.setOnSucceeded(evt -> {
tab.styleProperty().unbind();
tab.setStyle("");
button.setDisable(false);
});
new Thread(task).start();
});
tab.setContent(new StackPane(button));
return tab ;
}
public static void main(String[] args) {
launch(args);
}
}
colored-tab-demo.css與您發布的幾乎完全相同,但使用查找顏色而不是直接設置-fx-background-color:
.tab{
-fx-background-color: -fx-background;
-fx-background: pink ;
}
.tab:hover{
-fx-background: red;
}
.tab:selected{
-fx-background: yellow;
}
標簽:java,javafx,animation,background,colors
來源: https://codeday.me/bug/20191008/1873236.html
總結
以上是生活随笔為你收集整理的fxml设置背景_JavaFX – 如何获取Tab,Button等的背景颜色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为nova 10系列前瞻:骁龙芯加持
- 下一篇: java美元兑换,(Java实现) 美元