#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 (оставшееся нарушение здесь: имя пакета 🙂