【问题标题】:javafx: change style dynamically on panejavafx:在窗格上动态更改样式
【发布时间】:2016-07-09 15:54:54
【问题描述】:

我试图在鼠标移过窗格时更改窗格的样式,并在鼠标在窗格外时将其改回正常。

我可以做这样的事情

pane.setStyle("");

但是我希望我的 css 代码位于 css 样式表中,我想知道是否可以创建类似切换按钮的东西

.togglebutton{
     -fx-background-color:red;
}

.togglebutton:selected{
     -fx-background-color:green;
}

因此,每次我选择切换按钮时,样式都会自动更改。

问题是:是否可以创建一个参数来充当切换按钮。比如:

css 样式表

.mypane{
     //do something
}

.mypane:selected{
     // do something else
}

java代码

public void mousedragAction(MouseEvent event){
     mypane.isSelected(true);
}

public void mouseexit(MouseEvent event){
     mypane.isSelected(false);
}

非常感谢您提供的任何帮助或任何其他解决方案。

【问题讨论】:

    标签: css javafx styles stylesheet


    【解决方案1】:

    您正在寻找的功能已经通过hover pseudoclass 实现。所以你可以这样做

    .myPane {
        /* do something */
    }
    .myPane:hover {
        /* do something else */
    }
    

    一般来说,虽然在这种情况下没有必要,但您可以定义任意 CSS 伪类(其工作方式类似于 selectedhover)。例如,要重现悬停功能,您可以:

    PseudoClass moveOver = PseudoClass.getPseudoClass("mouse-over");
    Pane myPane = new Pane();
    myPane.getStyleClass().add("my-pane");
    myPane.setOnMouseEntered(e -> myPane.pseudoClassStateChanged(mouseOver, true));
    myPane.setOnMouseExited(e -> myPane.pseudoClassStateChanged(mouseOver, false));
    

    然后您可以使用以下 CSS:

    .my-pane {
        -fx-background-color: white ;
    }
    .my-pane:mouse-over {
        -fx-background-color: yellow ;
    }
    

    注意 CSS 中的伪类名称 (:mouse-over) 与传递给 getPseudoClass 方法 (PseudoClass.getPseudoClass("mouse-over")) 的字符串匹配,并且可以是任何可用作 CSS 标识符的字符串。

    【讨论】:

    • 另一个PseudoClass例子here
    • 是的,这正是我想要的。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2012-09-24
    • 2014-12-04
    • 2017-12-03
    相关资源
    最近更新 更多