javafx - 使ListView无法通过鼠标选择

use*_*646 7 listview javafx selection

JavaFX中是否有一个选项可以取消选择ListViewvia鼠标中项目的可能性?

我想在ListView没有任何用户交互的情况下显示一个.

Jur*_*gen 14

你也可以尝试:

listview.setMouseTransparent( true );
listView.setFocusTraversable( false );
Run Code Online (Sandbox Code Playgroud)

  • 但是使用这些设置时您仍然可以在列表视图中滚动吗? (2认同)
  • 不,您无法使用这些设置滚动列表. (2认同)

Mor*_*hai 10

将列表设置为鼠标透明也将阻止具有可交互的自定义​​列表单元格的单元格接受焦点.

理想的解决方案是使用特殊的选择模型:

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.MultipleSelectionModel;

public class NoSelectionModel<T> extends MultipleSelectionModel<T> {

    @Override
    public ObservableList<Integer> getSelectedIndices() {
        return FXCollections.emptyObservableList();
    }

    @Override
    public ObservableList<T> getSelectedItems() {
        return FXCollections.emptyObservableList();
    }

    @Override
    public void selectIndices(int index, int... indices) {
    }

    @Override
    public void selectAll() {
    }

    @Override
    public void selectFirst() {
    }

    @Override
    public void selectLast() {
    }

    @Override
    public void clearAndSelect(int index) {
    }

    @Override
    public void select(int index) {
    }

    @Override
    public void select(T obj) {
    }

    @Override
    public void clearSelection(int index) {
    }

    @Override
    public void clearSelection() {
    }

    @Override
    public boolean isSelected(int index) {
        return false;
    }

    @Override
    public boolean isEmpty() {
        return true;
    }

    @Override
    public void selectPrevious() {
    }

    @Override
    public void selectNext() {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在列表视图中设置模型:

listView.setSelectionModel(new NoSelectionModel<MyType>());
Run Code Online (Sandbox Code Playgroud)

  • 这是具有自定义列表单元格的用例的完美解决方案 - 但是,如果您想避免 caspian/modena.css 的焦点轮廓,则必须另外添加 `listView.setFocusTraversable(false)`,这可能是您所需要的无论如何,考虑到您的单元格不应该是可选的。 (3认同)
  • 如 @Folling 所示,将 `focusTraversable` 属性设置为 false 的另一种方法是执行与答案中相同的操作,但使用 `FocusModel` 除外(请参阅 [`ListView#focusModel`](https://openjfx. io/javadoc/13/javafx.controls/javafx/scene/control/ListView.html#focusModelProperty()))。这将允许“ListView”保持可聚焦,但会阻止聚焦单元格上的轮廓(至少,它对我来说是这样)。 (2认同)

Shr*_*ave 5

您可以使用事件处理程序阻止列表视图鼠标单击购买

listview.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent event) {
                System.out.println(">> Mouse Clicked");
                event.consume();
            }
        });
Run Code Online (Sandbox Code Playgroud)