Как я могу изменить цвет якорной панели из класса контроллера? - PullRequest
0 голосов
/ 26 марта 2019

Для графического интерфейса я делаю кнопки свертывания, свертывания, закрытия, похожие на кнопки Spotify, используя опорную панель для каждой «кнопки».Я создал кнопки через scenebuilder, и они загружаются в класс через fxml.Я не могу понять, как вызвать конкретный экземпляр якорной панели в классе контроллера, чтобы изменить его цвет фона, когда мышь входит или выходит.

public static Stage primaryStage;

@Override

public void start(Stage primaryStage) throws Exception
{

    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

    primaryStage.setScene(new Scene(root, 1280, 800));

    ...

    this.primaryStage = primaryStage;

    etc. 

- это способ настройки класса пользовательского интерфейса

* * 1005 Я ожидаю, что цвет anchorpane изменить, когда мышь входит в пределы, но сейчас я понятия не имею, как это назвать.

Ответы [ 4 ]

0 голосов
/ 30 марта 2019

код, необходимый для запуска, должен быть начальным классом

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();
    }
}

}

0 голосов
/ 26 марта 2019

Наиболее удобный способ сделать это imho - использовать таблицу стилей для назначения фона.

<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 с;вам просто нужно добавить класс стилей it (styleClass="my-button").

0 голосов
/ 30 марта 2019

вы знаете метод кода в scenebuilder, который вы можете установить с помощью мыши, введенной и закрытой для кнопки, метки и т. Д., Если, например, кнопка с идентификатором "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

Я надеюсь, что смогу помочь вам (извините за мой плохой английский)

0 голосов
/ 26 марта 2019

Решено, пришлось установить fxid для anchorpane и затем инициировать его в классе контроллера после @ FXML.

Вроде как:

@FXML
Anchorpane someButton;

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