gpt4 book ai didi

listview - 每个单元格中带有按钮的 javafx listview

转载 作者:行者123 更新时间:2023-12-02 19:44:50 24 4
gpt4 key购买 nike

我有一个 javafx 应用程序,其中包含带有自定义单元工厂的 ListView 。每个单元格都包含一个按钮,用于对该单元格执行特定操作。在更新到 java 8 之前一切正常,但是在使用 java 8 运行我的应用程序之后,当我单击按钮而不是按按钮处理事件时,整个单元格都会被选中。这是我的代码:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;

public class CustomCell extends ListCell<String> {
private Button actionBtn;

public CustomCell() {
super();

setOnMouseClicked(new EventHandler<MouseEvent>() {

@Override
public void handle(MouseEvent event) {
//do something
}
});
}

@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setEditable(false);
if (item != null) {
Label name = new Label(item);
actionBtn = new Button("my action");
actionBtn.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent arg0) {
System.out.println("hiiiiiiiii");

}
});

GridPane pane = new GridPane();
pane.getStyleClass().add("gridpane");
pane.add(name, 0, 0);
pane.add(actionBtn, 0, 1);
setGraphic(pane);
} else {
setText(null);
setGraphic(null);
}
}
}

最佳答案

这是一个错误,已提交。请参阅this discussion on OTN .

正如在那次讨论中一样,我强烈建议不要在 updateItem(...) 方法中创建新控件。最好为单元创建一次,然后在 updateItem(...) 中配置它们。例如:

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;

public class CustomCell extends ListCell<String> {
private Button actionBtn;
private Label name ;
private GridPane pane ;

public CustomCell() {
super();

setOnMouseClicked(new EventHandler<MouseEvent>() {

@Override
public void handle(MouseEvent event) {
//do something
}
});

actionBtn = new Button("my action");
actionBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Action: "+getItem());
}
});
name = new Label();
pane = new GridPane();
pane.add(name, 0, 0);
pane.add(actionBtn, 0, 1);
setText(null);
}

@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setEditable(false);
if (item != null) {
name.setText(item);
setGraphic(pane);
} else {
setGraphic(null);
}
}
}

除了显着提高效率之外,这还提供了解决该错误的方法。

关于listview - 每个单元格中带有按钮的 javafx listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137131/

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