Фокус внутри псевдокласса не работает для табуляции в JavaFXJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Фокус внутри псевдокласса не работает для табуляции в JavaFX

Сообщение Anonymous »

Согласно https://openjfx.io/javadoc/22/javafx.gr ... ssref.html JavaFX 22 поддерживает фокус внутри псевдокласса. Я использую JavaFX 23-ea+3, и это мой код:

Код: Выделить всё

public class JavaFxTest7 extends Application {

private static class Student {

private int id;

private int mark;

public Student(int id, int mark) {
this.id = id;
this.mark = mark;
}

public int getId() {
return id;
}

public int getMark() {
return mark;
}
}

private static class MyTab extends Tab {

private final TableView table = new TableView(FXCollections.observableList(
List.of(new Student(1, 3), new Student(2, 4), new Student(3, 5))));

private final MenuItem menuItem = new MenuItem("New Tab");

private final ContextMenu contextMenu = new ContextMenu(menuItem);

public MyTab() {
var idColumn = new TableColumn();
idColumn.setCellValueFactory((data) ->  new ReadOnlyObjectWrapper(data.getValue().getId()));
var markColumn = new TableColumn();
markColumn.setCellValueFactory((data) ->  new ReadOnlyObjectWrapper(data.getValue().getMark()));
table.getColumns().addAll(idColumn, markColumn);
menuItem.setOnAction((e) -> {
var newTab = new MyTab();
this.getTabPane().getTabs().add(newTab);
});
table.setContextMenu(contextMenu);
this.setContent(table);
}

}

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

@Override
public void start(Stage stage) {
TabPane tabPane = new TabPane();
tabPane.getTabs().add(new MyTab());
var scene = new Scene(tabPane, 400, 300);
var css= this.getClass().getResource("test7.css").toExternalForm();
scene.getStylesheets().add(css);
stage.setScene(scene);
stage.show();
}
}
и test7.css:

Код: Выделить всё

.tab-pane > .tab-header-area .tab .focus-indicator {
-fx-border-width: 2 0 0 0;
-fx-border-color: green;
-fx-border-insets: -3 -5 0 -5;
-fx-border-radius: 2 2 0 0;
}

.tab-pane > .tab-header-area .tab:focus-within .focus-indicator {
-fx-border-width: 2 0 0 0;
-fx-border-color: red;
-fx-border-insets: -3 -5 0 -5;
-fx-border-radius: 2 2 0 0;
}
И вот результат:
[img]https://i.stack.imgur .com/RBkzd.png[/img]

Как вы видите, таблица на первой вкладке имеет фокус, но вкладка имеет зеленую рамку, а не красную. Может ли кто-нибудь сказать, как это исправить? Или я неправильно понимаю смысл этого псевдокласса?
Изменить:
@James_D объяснил правильное использование фокуса -widthin с TabPane. Однако когда я изменил свой код на:

Код: Выделить всё

...
@Override
public void start(Stage stage) {
TabPane tabPane0 = new TabPane();
tabPane0.getTabs().add(new MyTab());
TabPane tabPane1 = new TabPane();
tabPane1.getTabs().add(new MyTab());
var scene = new Scene(new VBox(tabPane0, tabPane1), 400, 300);
var css= this.getClass().getResource("test7.css").toExternalForm();
scene.getStylesheets().add(css);
stage.setScene(scene);
stage.show();
}
...
со следующими настройками CSS:

Код: Выделить всё

.tab-pane > .tab-header-area .tab .focus-indicator {
-fx-border-width: 2 0 0 0;
-my-tab-border-color: green;
-fx-border-color: -my-tab-border-color;
-fx-border-insets: -3 -5 0 -5;
-fx-border-radius: 2 2 0 0;
}

.tab-pane:focus-within > .tab-header-area .tab:selected .focus-indicator {
-my-tab-border-color: red;
}
Я получил такой результат:
[img]https://i.stack.imgur. com/cODxd.png[/img]

Это не то, чего я ожидаю, потому что только одна TabPane может иметь вкладку с красной рамкой - ту, которая имеет сфокусированная таблица.

Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-javafx
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Фокус внутри псевдокласса не работает для табуляции в JavaFX
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Intellij javafx module info.java: модуль считывает пакет «javafx.fxml» как из "javafx.fxml ', так и" javafx.fxml'
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Обнаружить фокус, инициированный клавишей табуляции?
    Гость » » в форуме Jquery
    0 Ответы
    21 Просмотры
    Последнее сообщение Гость
  • Обнаружить фокус, инициированный клавишей табуляции?
    Anonymous » » в форуме Jquery
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Очистите фокус от QTableWidget, как только навигация по клавишам табуляции достигнет последнего элемента.
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»