java - 如何使 JavaFX ListView 中的前 2 行不可选择

标签 java javafx javafx-8

如果我使用playList.getSelectionModel().select(1) - 突出显示的选择将是播放列表的第二行。如果我使用 playList.getSelectionModel().select(-1) 来选择无行(如 StackOverflow 上其他地方的建议),则将选择第一行。有谁知道为什么这不起作用?我希望 ListView 的前两行永远没有资格被选择。

我正在使用 JavaFX-8。

public class AudioPlayerFXMLController implements Initializable {

@FXML
private ListView playList;
private static ObservableList<Object> playListItems;
private static final String NEW_PLAYLIST = "New PlayList";
private static final String FRIEND_PLAYLIST = "Friend's PlayList";

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

    playListItems = FXCollections.observableArrayList();
    playListItems.add(NEW_PLAYLIST);
    playListItems.add(FRIEND_PLAYLIST);

    playList.setItems(FXCollections.observableList(playListItems));


    playList.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
        @Override
        public ListCell<String> call(ListView<String> list) {
            return new ImageCell();
        }
    });

    playList.getSelectionModel().select(-1);

}

static class ImageCell extends ListCell<String> {

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if ((this.getIndex() == 0) || (this.getIndex() == 1)) {
            ImageView addSymbol;
            addSymbol = ImageViewBuilder.create().image(new Image("/images/ic_add_grey600_15dp.png")).build();
            addSymbol.fitHeightProperty();
            setText(item);
            setGraphic(addSymbol);

        } else {
            setText(null);
            setGraphic(null);
        }
    }

}

}

最佳答案

根据您使用的 jdk8 的确切(更新)版本,这可能是 RT-25679 的修复程序。 (在 RT-38517 中部分恢复)据我所知,一般没有公共(public) API 来禁用 Collection View 的自动聚焦/选择。只有 ListView 在其属性中具有禁用默认行为的条目(未记录!请注意,它们可以在不通知的情况下进行更改)禁用默认行为

// disable selecting the first item on focus gain - this is
// not what is expected in the ComboBox control (unlike the
// ListView control, which does this).
listView.getProperties().put("selectOnFocusGain", false);
// introduced between 8u20 and 8u40b7
// with this, testfailures back to normal
listView.getProperties().put("selectFirstRowByDefault", false);

关于java - 如何使 JavaFX ListView 中的前 2 行不可选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26521658/

相关文章:

java - 如何理解java递归的返回值

java - 如何将 JavaFX javafx.scene.shape.Path 的实例保存到文件

JavaFX 场景在 Windows 10 上的场景构建器和运行时中的缩放比例不同

java - 从 Controller 访问域对象

java - 字符串生成器替换如何工作?

java - org.junit 包不存在

java buf[--pos] = (byte)b 请解释一下方括号中的内容

java - 如何检测 JavaFX 2.2 运行时可用性

java - 基于 ChoiceBox 选择过滤 observableArrayList

java - 在fxml中初始化Spinner控件