【问题标题】:Change Color of Controls FX PopOver Title更改控件 FX PopOver 标题的颜色
【发布时间】:2017-11-17 08:41:00
【问题描述】:

想要更改设置为始终打开的控件 FX PopOver 标题的颜色。我想在 CSS 中执行此操作,我已经更改了背景颜色。我在 .popover 下尝试了几个不同的选项。

这是我最后尝试的 CSS 示例:

public class HelloPopOver extends Application {

    @Override
    public void start(Stage primaryStage) {


        //Build PopOver look and feel
        Label lblName = new Label("John Doe");
        Label lblStreet = new Label("123 Hello Street");
        Label lblCityStateZip = new Label("MadeUpCity, XX 55555");   
        VBox vBox = new VBox(lblName, lblStreet, lblCityStateZip);
        //Create PopOver and add look and feel
        PopOver popOver = new PopOver(vBox);

        // I always want to see my header
        popOver.setHeaderAlwaysVisible(true);

        Label label = new Label("Mouse mouse over me");
        label.setOnMouseEntered(mouseEvent -> {
            popOver.show(label);
            ((Parent)popOver.getSkin().getNode()).getStylesheets().add(getClass().getResource("Style.css").toExternalForm());
        });


        StackPane root = new StackPane();
        root.getChildren().add(label);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
   }    
}

还有 CSS:

.popover > .border {
    -fx-stroke-width: 0.5;
    -fx-fill: rgba(200,200,200, 1);
    -fx-text-fill: red; /* This doesn't work, but is what I am looking for */
}
.popover > .label {
    -fx-text-fill: red; /* This doesn't work, but is what I am looking for */
 }

CSS如何将标题颜色改为红色?

【问题讨论】:

  • 你试过.popover .label而不是.popover > .label吗?您现在所拥有的是选择 PopOvers 的直接子标签,而您的标签可能不是。
  • 我做到了,但并不快乐。我也试过.label,但这也没有给我任何东西。我怀疑我完全称它为标签,从而使我的搜索产生了偏见。
  • 是的,我认为这是一个远射,您可能已经尝试过了。你总是可以在java中的标签上设置一个特定的样式类,比如label.getStyleClass().add("popover-label")而不是.popover > .label,只需调用它.popover-label
  • 也看看这个问题stackoverflow.com/questions/28086092/javafx-style-by-classname 他们做的一件事就是直接使用对象的类名,而不是像这样的类选择器:Label 而不是.label跨度>
  • 你能自己做一个标题吗?

标签: java css javafx popover controlsfx


【解决方案1】:

我遇到了同样的问题,并通过查看 org.controlsfx.control 中的 popover.css 文件解决了这个问题。

这应该可以解决问题:

.popover > .content > .title > .text  {
    -fx-text-fill: red;
}

【讨论】:

  • 太完美了,感谢您指出您是如何找到它的。
【解决方案2】:

这是一个非常粗略的示例,说明如何创建自己的标题。我个人会使用AwesomeFontFx 图标代替按钮。我还将使标题居中并添加间距。我使用Text 作为标题。 Text 允许你改变它的颜色。

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import org.controlsfx.control.PopOver;

public class HelloPopOver extends Application {

    @Override
    public void start(Stage primaryStage) {


        //Build PopOver look and feel 



        Label lblClosePopOver = new Label("x");
        Text lblHeader = new Text("Keyword info");
        lblHeader.setFill(Color.RED);
        HBox headerRoot = new HBox(lblClosePopOver, lblHeader);
        headerRoot.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE);
        Label lblName = new Label("John Doe");
        Label lblStreet = new Label("123 Hello Street");
        Label lblCityStateZip = new Label("MadeUpCity, XX 55555");  

        VBox infoHolder = new VBox(lblName, lblStreet, lblCityStateZip);
        VBox.setMargin(infoHolder, new Insets(7, 7, 7, 7));
        VBox subRoot = new VBox(new StackPane(headerRoot), infoHolder);
        AnchorPane popOverRoot = new AnchorPane(subRoot);


        //Create PopOver and add look and feel
         Label label = new Label("Mouse mouse over me");
        PopOver popOver = new PopOver(label);
        popOver.setContentNode(popOverRoot);
        lblClosePopOver.setOnMouseClicked((event)->{
            if(popOver.isShowing())
            {
                popOver.hide();
            }
        });
    // I always want to see my header        
    //popOver.setHeaderAlwaysVisible(true);


        label.setOnMouseEntered(mouseEvent -> {
            popOver.show(label);
        });


    StackPane root = new StackPane();
    root.getChildren().add(label);

    Scene scene = new Scene(root, 300, 250);


        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
   }    
}

【讨论】:

  • 这在技术上是一种选择,但不是我想要的。我想我可以做到这一点,并拥有一个带有自定义关闭按钮的 HBox。我希望我可以只用样式表来解决这个问题。
  • 嗯,这是一个备份,以防万一你找不到其他东西。我更新了答案,使它看起来更好。
  • 我很感激。
猜你喜欢
  • 2015-04-30
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多