JavaFX 通过 CSS 为按钮的图形节点设置样式
JavaFX Styling a Graphic-Node of a Button via CSS
我正在尝试重新创建我在 Swing 中使用的 LookAndFeel。
到目前为止一切正常,但我通过设置按钮的图形节点样式失败了。
Java-代码:
Button btnAdd= new Button();
btnAdd.setGraphic(iconAdd); //iconAdd = ImageView
CSS:
.button:disabled, .button:default:disabled {
-fx-opacity: 1.0;
-fx-background-color: rgb(239, 239, 239);
-fx-border-color: rgb(217, 217, 217);
}
.button:disabled > .graphic {
-fx-opacity: 0.1;
}
如您所见,我希望按钮在禁用时不透明(这可行!)。
我只希望作为 Button 子项的 Graphic-Node 透明。
此致,
强
按钮中的图形不会自动获取classgraphic
样式,需要添加:
iconAdd.getStyleClass().add("graphic");
SSCCE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class ButtonGraphicCssTest extends Application {
@Override
public void start(Stage primaryStage) {
Button button = new Button();
Image image = new Rectangle(20, 20, Color.CORNFLOWERBLUE).snapshot(null, null);
ImageView imageView = new ImageView(image);
imageView.getStyleClass().add("graphic");
button.setGraphic(imageView);
button.setOnAction(e -> button.setDisable(true));
StackPane root = new StackPane(button);
Scene scene = new Scene(root, 350, 120);
scene.getStylesheets().add("button-graphic-disabled.css");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
按钮图形-disabled.css:
.button:disabled, .button:default:disabled {
-fx-opacity: 1.0;
-fx-background-color: rgb(239, 239, 239);
-fx-border-color: rgb(217, 217, 217);
}
.button:disabled > .graphic {
-fx-opacity: 0.1;
}
我正在尝试重新创建我在 Swing 中使用的 LookAndFeel。
到目前为止一切正常,但我通过设置按钮的图形节点样式失败了。
Java-代码:
Button btnAdd= new Button();
btnAdd.setGraphic(iconAdd); //iconAdd = ImageView
CSS:
.button:disabled, .button:default:disabled {
-fx-opacity: 1.0;
-fx-background-color: rgb(239, 239, 239);
-fx-border-color: rgb(217, 217, 217);
}
.button:disabled > .graphic {
-fx-opacity: 0.1;
}
如您所见,我希望按钮在禁用时不透明(这可行!)。
我只希望作为 Button 子项的 Graphic-Node 透明。
此致,
强
按钮中的图形不会自动获取classgraphic
样式,需要添加:
iconAdd.getStyleClass().add("graphic");
SSCCE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class ButtonGraphicCssTest extends Application {
@Override
public void start(Stage primaryStage) {
Button button = new Button();
Image image = new Rectangle(20, 20, Color.CORNFLOWERBLUE).snapshot(null, null);
ImageView imageView = new ImageView(image);
imageView.getStyleClass().add("graphic");
button.setGraphic(imageView);
button.setOnAction(e -> button.setDisable(true));
StackPane root = new StackPane(button);
Scene scene = new Scene(root, 350, 120);
scene.getStylesheets().add("button-graphic-disabled.css");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
按钮图形-disabled.css:
.button:disabled, .button:default:disabled {
-fx-opacity: 1.0;
-fx-background-color: rgb(239, 239, 239);
-fx-border-color: rgb(217, 217, 217);
}
.button:disabled > .graphic {
-fx-opacity: 0.1;
}