JavaFX эффект onAction по умолчанию

#java #css #javafx #scenebuilder

#java #css #javafx #scenebuilder

Вопрос:

Может кто-нибудь сказать мне, как я могу отключить эффект по умолчанию, возникающий при нажатии кнопки? Когда я нажимаю, текст увеличивается. (изображения под кодом)

Главная

 import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("iPTD_Fxml/MainScreen.fxml"));
        Scene mainScreen = new Scene(root);
        mainScreen.setFill(Color.TRANSPARENT);
        primaryStage.setScene(mainScreen);
        primaryStage.initStyle(StageStyle.TRANSPARENT);
        primaryStage.show();

    }


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

КОНТРОЛЛЕР

 package iPTD_Controllers;

import com.sun.media.jfxmediaimpl.platform.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;

import java.net.URL;
import java.util.ResourceBundle;

public class MainScreenController implements Initializable {

    private static final String IDLE_BUTTON_STYLE = "-fx-background-color: rgba(0,0,0, .50); -fx-background-radius: 15; -fx-border-radius: 15; -fx-border-color: #42f54e; -fx-font-weight: bold;";
    private static final String HOVERED_BUTTON_STYLE = "-fx-background-color: rgba(84,84,84, .50); -fx-background-radius: 15; -fx-border-radius: 15; -fx-border-color: #FFFFFF; -fx-font-weight: bold;";

    @FXML
    private Button buttonSettings;
    @FXML
    private Button buttonNewProject;
    @FXML
    private Button buttonOpenProject;
    @FXML
    private Button buttonAbout;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {}

    @FXML
    void onMouseEnterEvent(MouseEvent event) {
        Button eventButton = ((Button)event.getSource());
        eventButton.setStyle(HOVERED_BUTTON_STYLE);
    }

    @FXML
    void onMouseExitEvent(MouseEvent event) {
        Button eventButton = ((Button)event.getSource());
        eventButton.setStyle(IDLE_BUTTON_STYLE);
    }

    @FXML
    public void onActionEvent(ActionEvent actionEvent) {
        Button eventButton = ((Button)actionEvent.getSource());
        switch (eventButton.getId())
        {
            case "buttonClose":{
                ((Stage)((eventButton).getScene().getWindow())).close();
                eventButton.setStyle(IDLE_BUTTON_STYLE);
            }
            default:
                System.out.println("buttonNull");
        }
    }

}
  

Нормальный:

введите описание изображения здесь

ПРИ НАЖАТИИ: (хотелось бы отключить это увеличение текста при нажатии кнопки) OBS: при быстром нажатии (нажмите и отпустите кнопку) эффект появляется и завершается, но если вы продолжаете нажимать на него, эффект завершится только тогда, когда вы перестанете нажимать.

введите описание изображения здесь

CSS:

 #mainScreen_AnchorPane{
    -fx-background-radius: 50;
    -fx-background-color: transparent;
}

.button{
    -fx-background-color: rgba(0,0,0, .50);
    -fx-background-radius: 15;
    -fx-border-radius: 15;
    -fx-border-color: #42f54e;
    -fx-font-weight: bold;
}

.button:hover{
    -fx-background-color: rgba(84,84,84, .50);
    -fx-background-radius: 15;
    -fx-border-radius: 15;
    -fx-border-color: #ffffff;
    -fx-font-weight: bold;
}
  

Комментарии:

1. Просто предполагаю, что вам, вероятно, нужно установить стиль для нажатой кнопки, а также по умолчанию и зависания. Я рекомендую использовать внешнюю таблицу стилей и использовать соответствующие псевдоклассы вместо использования прослушивателей.

2. Хм, я поищу об этом, но есть разница в производительности между псевдоклассами usin и слушателями?

3. Об этом я не знаю. Это предпочтительный подход, потому что он правильно разделяет проблемы (стиль разделяется на другое место, чем макет), что на порядок важнее производительности. Кроме того, очевидно, что авторы библиотеки JavaFX оптимизируют производительность для предпочтительного подхода, поэтому без каких-либо доказательств обратного я бы предположил, что использование внешней таблицы стилей предпочтительным способом будет работать, по крайней мере, так же хорошо, как и использование непривлекательного подхода.

4. Да, я понял, но мне все еще нужно решение, я пытался заменить каждое отдельное событие и ничего. Все еще увеличивается текст.

5. пожалуйста, соглашения об именовании java (оставшееся нарушение здесь: имя пакета 🙂