gpt4 book ai didi

JavaFX ListView 和 ContextMenu - getSelectedItem() 返回 null

转载 作者:行者123 更新时间:2023-11-29 05:55:02 25 4
gpt4 key购买 nike

我想在 listView 的行上使用上下文菜单项。在 listView 的 MOUSE_CLICKED 事件的事件处理程序中,getSelectionModel().getSelectedItem() 返回所选项目,没关系。但是,当我处理 contextMenuItem 的 onAction 事件时,它返回 null。但是,以图形方式选择了该项目。有没有办法在第一次事件处理后“保留”选择?

这是代码的相关部分:

    ListView<Text> nameList = new ListView<>();
final ContextMenu cCm = new ContextMenu();
MenuItem cItem = new MenuItem("someText");
cCm.getItems().add(cItem);

...

nameList.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

@Override
public void handle(MouseEvent e) {
if (e.getButton() == MouseButton.SECONDARY) {
//its OK here:
System.out.println(nameList.getSelectionModel().getSelectedItem().getText());
cCm.show(nameList, e.getScreenX(), e.getScreenY());
}
}
});

cItem.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent e) {
final Stage dialog = new Stage();
dialog.initModality(Modality.WINDOW_MODAL);
//nullPointerException on the following:
Text t = new Text(nameList.getSelectionModel().getSelectedItem().getText());
//showing dialog, etc.

最佳答案

我几乎完全复制了您所做的,并且我的实现有效:

private void initRandomCardListView() {
populateRandomList();
final ContextMenu randomListContextMenu = new ContextMenu();
MenuItem replaceCardMenuItem = new MenuItem("Replace");
replaceCardMenuItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
replaceRandomCard();
}
});
randomListContextMenu.getItems().add(replaceCardMenuItem);

randomCardList.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getButton().equals(MouseButton.SECONDARY)) {
randomListContextMenu.show(randomCardList, event.getScreenX(), event.getScreenY());
}
}
});
}

private void replaceRandomCard() {
System.out.println("jobs done");
System.out.println("card selected: " + randomCardList.selectionModelProperty().get().getSelectedItem().toString());
System.out.println("card index: " + randomCardList.getSelectionModel().getSelectedIndex());
System.out.println("card index: " + randomCardList.getSelectionModel().getSelectedItem().toString());
}

我没有任何空指针异常。总体而言,您的实现看起来不错。您的 ListView 中的项目很可能有问题。

关于JavaFX ListView 和 ContextMenu - getSelectedItem() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12516871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com