Когда title
наведен, modena.css
изменяет значение именованного цвета , чтобы придать ему стиль наведения; в частности, меняется -fx-color
. Похоже, что это имеет побочный эффект изменения Button
на стиль его наведения. Я ожидаю, что это можно считать ошибкой.
Чтобы обойти эту проблему, примените следующий CSS (селекторы предполагают, что Button
- это изображение):
.titled-pane > .title:hover > .button {
-fx-color: -fx-base;
}
.titled-pane > .title:hover > .button:hover {
-fx-color: -fx-hover-base;
}
.titled-pane > .title:hover > .button:armed {
-fx-color: -fx-pressed-base;
}
Вышеуказанное заставит Button
сохранить стиль по умолчанию. Очевидно, вы можете стилизовать Button
по-своему, используя те же селекторы.
Поскольку вам нужно ориентироваться на псевдоклассы, будет проще иметь CSS во внешнем файле, а не устанавливать стили внутри setStyle
. Чтобы сохранить ваш внешний вид, вы можете использовать следующую таблицу стилей (включая вышеупомянутую):
.titled-pane {
-fx-collapsible: false;
-fx-content-display: right;
-fx-graphic-text-gap: 10px;
}
.titled-pane > .title,
.titled-pane > .content {
-fx-background-color: white;
-fx-border-style: solid;
-fx-border-color: black;
-fx-border-width: 1px;
}
.titled-pane > .title:hover > .button {
-fx-color: -fx-base;
}
.titled-pane > .title:hover > .button:hover {
-fx-color: -fx-hover-base;
}
.titled-pane > .title:hover > .button:armed {
-fx-color: -fx-pressed-base;
}
А вот пример использования этого CSS:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TitledPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
var pane = new TitledPane("CONSOLE", new TextArea("This is the console output."));
pane.setGraphic(new Button("CLEAR"));
var scene = new Scene(pane, 600, 400);
scene.getStylesheets().add("Main.css"); // replace with your resource
primaryStage.setScene(scene);
primaryStage.show();
}
}