我正在使用jfoenix库中的JFXListView
和JFXListCell
,其目的和功能与常规ListView
相同。
该列表包含一些Label
,Button
和AnchorPane
。在列表的顶部和底部,我想添加不可选择的项目。项目should not be selectable on mouse click
,should not be able to focus
和should not be able to scroll
。
尽管我使用updateItem()
功能并设置了禁用项:
@FXML
JFXListView listView;
ObservableList<AnchorPane> list = FXCollections.observableArrayList();
private void initializeListView(){
AnchorPane headerBottomPane = new AnchorPane();
headerBottomPane.setId("headerBottomPane");
....//some property of AnchorPane
list.add(headerBottomPane); //Add header AnchorPane
while(true){
AnchorPane listContainer = new AnchorPane();
Label title = new Label();
Label subtitle = new Label();
Button button = new Button();
Button button2 = new Button();
//Some code here...
listContainer.getChildren().addAll(label, subtitle, button, button2);
list.add(listContainer);
//some code here...
}
list.add(headerBottomPane); //Add bottom AnchorPane
listView.setCellFactory(new CallBack<JFXListView, JFXListCell>(){
@Override
public JFXListCell call(JFXListView param){
return new JFXListCell<AnchorPane>(){
@Override
protected void updateItem(AnchorPane anchorPane, boolean empty){
super.updateItem(anchorPane, empty);
if(anchorPane != null){
if(anchorPane.getId.equals("headerBottomPane")){
setDisable(true);
}
setItem(anchorPane);
}else{
setItem(null);
}
}
};
}
});
}
我可以禁用列表的第一项和最后一项,该项目不再能够使用mouseClick
进行选择。
但是问题是,当我使用Keyboard arrow up
和arrow down
时,它是可以聚焦的。另一个奇怪的事情是,当我使用mouse wheel
来滚动列表时,某些项目正在变得也是不可选择的。
答案 0 :(得分:1)
我认为您必须将listView.setCellFactory()
函数放在添加这些项目的代码顶部,在添加该项目之前尝试对其进行初始化。
在您的updateItem()
内尝试使用setMouseTransparent()
和setFocusTravesable()
。
@Override
protected void updateItem(AnchorPane anchorPane, boolean empty){
super.updateItem(anchorPane, empty);
if(anchorPane != null){
if(anchorPane.getId.equals("headerBottomPane")){
setItem(anchorPane); //moved at the top
setMouseTransparent(true); //added this line
setFocusTraversable(false); //added this line
setDisable(true);
}else{
setItem(null);
}
}
我还没有测试过,但我希望它能工作。
答案 1 :(得分:0)
我会想到只使用一个VBox,然后将顶部的不可选择项放在第一位,然后将ListView与所有可选择的项放在一起,再将底部的不可选择项放在……...