如何从控制器类更改锚定板的颜色?

时间:2019-03-26 05:44:06

标签: java javafx fxml scenebuilder

对于GUI,我通过对每个“按钮”使用定位窗格来制作类似于Spotify的最小化,最大化,关闭按钮。我通过scenebuilder创建了按钮,并通过fxml将它们加载到类中。我无法弄清楚如何在控制器类中调用锚定窗格的特定实例以在鼠标进入或退出时更改其背景颜色。

var arr = [ [ 'AAAA.3', 'S3' ], [ 'AAAA.4', 'S4' ], [ 'AAAA.5', 'S5' ], [ 'AAAA.6', 'S6' ], [ 'AAAA.7', 'S7' ], [ 'AAAA.8', 'S8' ], [ 'AAAA.9', 'S9' ], [ 'AAAA.10', 'S10' ], [ 'AAAA.10', 'S11' ], [ 'AAAA.12', 'S12' ], [ 'AAAA.13', 'S13' ], [ 'AAAA.14', 'S14' ] ];

const searchValue = '10';

const output = arr.filter((item) => item.some((value) => value.includes(searchValue) ) );
console.log(output)

UI类的设置方式

我希望当鼠标进入边界时锚定板的颜色会改变,但是到目前为止,我还不知道如何调用它。

4 个答案:

答案 0 :(得分:0)

解决了该问题,必须在锚定窗格中设置一个fxid,然后在@FXML之后在控制器类中将其初始化。

像这样的金田:

@FXML
Anchorpane someButton;

@FXML
public void makeButtonWhite(MouseEvent event)
{
    someButton.setStyle("-fx-background-color: #ffffff");
}

答案 1 :(得分:0)

执行此恕我直言最方便的方法是使用样式表分配背景。

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" stylesheets="@style.css">
    <children>
       <AnchorPane prefWidth="30" prefHeight="20" styleClass="my-button"/>
    </children>
</AnchorPane>

style.css (与fxml相同的目录)

/* default style */
.my-button {
    -fx-background-color: blue;
}

/* style when mouse is inside the region */
.my-button:hover {
    -fx-background-color: red;
}

这使您可以轻松地将样式添加到多个Region中;您只需要添加样式类(styleClass="my-button")。

答案 2 :(得分:0)

您知道场景构建器中的代码方法,可以在其中为按钮,标签等在进入和退出的鼠标上进行设置。例如,如果按钮的ID为“ closeButton”,OnMouseEntered为“ closeButtonOnEntered”和OnMouseExited为“ closeButtonOnExited” ” 这将是您需要的代码

public yourcontrollerclass {
     @FXML
     Button closeButton;

     @FXML
     private void closeButtonOnEntered() {
           //sets button red
           button.setStyle("-fx-background-color: #ff0000");
     }

     @FXML
     private void closeButtonOnExited() {
          //sets button your first color
          button.setStyle("-fx-background-color: transparent");
     }
}

这几乎可以在sceneBuilder中完成的所有操作

希望我能对您有所帮助(对不起,我的英语不好)

答案 3 :(得分:0)

您需要的代码必须是起始类

public class Class extends Application {

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    try {
        // Load root layout from fxml file.
        FXMLLoader loader = new FXMLLoader();

        loader.setLocation(this.getClass().getResource("/Folder/File.fxml"));
        loader.setController(yourControllerClass());
        //only if you do something with the controller class afterwards
        YourControllerClass controller = loader.setController();

        Parent parent = loader.load();

        // Show the scene containing the root layout.
        Scene scene = new Scene(parent);
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}